ArkTs建造者模式,初出茅庐

643 阅读4分钟

ArkTS中建造者模式实现主要依托面向对象特性和链式调用语法,结合设计模式核心要素实现。以下是关键实现要点及示例说明:

一、核心角色定义

  1. 产品(Product) ‌ 定义需要构造的复杂对象,包含多个部件属性:
   class Computer {
       cpu: string = "";
       memory: string = "";
       storage: string = "";
   }

2. ‌抽象建造者(Builder) ‌ 声明构建部件方法的标准接口:

   interface ComputerBuilder {
       setCPU(cpu: string): ComputerBuilder;
       setMemory(memory: string): ComputerBuilder;
       setStorage(storage: string): ComputerBuilder;
       build(): Computer;
   }

3. ‌具体建造者(ConcreteBuilder) ‌ 实现链式调用并维护产品实例:

    class StandardComputerBuilder implements ComputerBuilder {
       private computer: Computer = new Computer();
   
       setCPU(cpu: string): this {
           this.computer.cpu = cpu;
           return this;
       }
   
       setMemory(memory: string): this {
           this.computer.memory = memory;
           return this;
       }
   
       setStorage(storage: string): this {
           this.computer.storage = storage;
           return this;
       }
   
       build(): Computer {
           return this.computer;
       }
   }

4. ‌指挥者(Director,可选) ‌ 封装构建过程标准化逻辑:

class ComputerDirector {
    constructGamingPC(builder: ComputerBuilder): Computer {
       return builder
               .setCPU("i9-13900K")
               .setMemory("32GB DDR5")
               .setStorage("2TB NVMe SSD")
               .build();
     }
 }

二、使用方式

  1. 直接链式调用
   let gamingPC = new StandardComputerBuilder()
       .setCPU("Ryzen 9 7950X")
       .setMemory("64GB DDR5")
       .setStorage("4TB SSD")
       .build();

2. ‌通过指挥者调用

   let director = new ComputerDirector();
   let officePC = director.constructGamingPC(new StandardComputerBuilder());

3. ‌在ide里面调试调用

aboutToAppear(): void {
  let gamingPC = new StandardComputerBuilder()
    .setCPU("Ryzen 9 7950X")
    .setMemory("64GB DDR5")
    .setStorage("4TB SSD")
    .build();
​
  console.log(TAG+"cpu"+gamingPC.cpu);
  console.log(TAG+"Memory"+gamingPC.memory);
  console.log(TAG+"Storage"+gamingPC.storage);
​
}

3.1 ‌查看调用效果日志

image-20250510123519094

4完整代码

const  TAG="main";
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
​
  aboutToAppear(): void {
    let gamingPC = new StandardComputerBuilder()
      .setCPU("Ryzen 9 7950X")
      .setMemory("64GB DDR5")
      .setStorage("4TB SSD")
      .build();
​
    console.log(TAG+"cpu"+gamingPC.cpu);
    console.log(TAG+"Memory"+gamingPC.memory);
    console.log(TAG+"Storage"+gamingPC.storage);
​
​
​
  }
​
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.message = 'Welcome';
        })
    }
    .height('100%')
    .width('100%')
  }
}
​
​
class Computer {
  cpu: string = "";
  memory: string = "";
  storage: string = "";
}
​
interface ComputerBuilder {
  setCPU(cpu: string): ComputerBuilder;
  setMemory(memory: string): ComputerBuilder;
  setStorage(storage: string): ComputerBuilder;
  build(): Computer;
}
​
class StandardComputerBuilder implements ComputerBuilder {
  private computer: Computer = new Computer();
​
  setCPU(cpu: string) {
    this.computer.cpu = cpu;
    return this;
  }
​
  setMemory(memory: string) {
    this.computer.memory = memory;
    return this;
  }
​
  setStorage(storage: string) {
    this.computer.storage = storage;
    return this;
  }
​
  build(): Computer {
    return this.computer;
  }
}

三、优势特性

  1. 灵活扩展性‌ 可定义多个具体建造者(如HighEndComputerBuilderBudgetComputerBuilder)实现不同配置组合15;
  2. 代码可读性‌ 链式调用语法使配置过程更符合自然语言逻辑;
  3. 构建解耦‌ 指挥者可复用同一构建流程生成不同产品,分离业务逻辑与对象构造细节。

四、适用场景

  • 需要生成的对象具有复杂内部结构(如自定义UI组件组合)4;
  • 相同构建过程需要产生不同表示形式(如不同设备适配的布局方案)1;
  • 对象属性需分步骤渐进式设置(如异步加载配置项

最后总结

arkts的建造者模式和我们的Java语言很像 思路是一样的只是语法不一样,我们把握好 产品 抽象构造者,具体构造者 ,和指挥者即可实现我们的建造这么模式,我们的鸿蒙next 中arkts的建造者模式,今天的文章就讲到这里有兴趣的 关注我B站教程,了解更多鸿蒙开发的知识 可以关注坚果派公众号 。谢谢

课程地址

www.bilibili.com/cheese/play…

项目内容:

  • 1 常用布局组件的学习
  • 2 网络请求工具类封装
  • 3 arkui 生命周期启动流程
  • 4 日志工具类的封装
  • 5 自定义组合组件的封装
  • 6 路由导航跳转的使用
  • 7 本地地数据的缓存 以及缓存工具类的封装
  • 8 欢迎页面的实现
  • 9 登录案例和自动登录效果实现
  • 10 请求网络数据分页上拉加载 下拉刷新的实现
  • 11 list数据懒加载实现
  • 12 webview组件的使用

如果使用更多好用的鸿蒙next三方库

团队介绍

团队介绍:坚果派由坚果等人创建,团队由12位华为HDE以及若干热爱鸿蒙的开发者和其他领域的三十余位万粉博主运营。专注于分享 HarmonyOS/OpenHarmony,ArkUI-X,元服务,仓颉,团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,目前已开发鸿蒙 原生应用,三方库60+,欢迎进行课程,项目等合作。

友情链接

harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用,能够满足各种不同的开发需求。

harmony-dialog 一款极为简单易用的零侵入弹窗,仅需一行代码即可轻松实现,无论在何处都能够轻松弹出。