ArkTS中建造者模式实现主要依托面向对象特性和链式调用语法,结合设计模式核心要素实现。以下是关键实现要点及示例说明:
一、核心角色定义
- 产品(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();
}
}
二、使用方式
- 直接链式调用
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 查看调用效果日志
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;
}
}
三、优势特性
- 灵活扩展性 可定义多个具体建造者(如
HighEndComputerBuilder
、BudgetComputerBuilder
)实现不同配置组合15; - 代码可读性 链式调用语法使配置过程更符合自然语言逻辑;
- 构建解耦 指挥者可复用同一构建流程生成不同产品,分离业务逻辑与对象构造细节。
四、适用场景
- 需要生成的对象具有复杂内部结构(如自定义UI组件组合)4;
- 相同构建过程需要产生不同表示形式(如不同设备适配的布局方案)1;
- 对象属性需分步骤渐进式设置(如异步加载配置项
最后总结
arkts的建造者模式和我们的Java语言很像 思路是一样的只是语法不一样,我们把握好 产品 抽象构造者,具体构造者 ,和指挥者即可实现我们的建造这么模式,我们的鸿蒙next 中arkts的建造者模式,今天的文章就讲到这里有兴趣的 关注我B站教程,了解更多鸿蒙开发的知识 可以关注坚果派公众号 。谢谢
课程地址
项目内容:
-
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 一款极为简单易用的零侵入弹窗,仅需一行代码即可轻松实现,无论在何处都能够轻松弹出。