跟我一起学“仓颉”设计模式-建造者模式
一、建造者模式建造者模式将一个复杂对象的构建与它的表示分离使得同样的构建构成可以创建不同的表示创建型。建造者包含以下角色抽象建造者创建一个产品对象的各个部件指定抽象接口在其接口中声明两类方法一类方法是建造该产品零件的函数另一类方法是获取结果的函数具体建造者实现抽象建造者的各个零件建造的函数返回具体的创建好的产品产品被构建的复杂对象具体建造者创建该产品的内部表示并定义它的装配过程指挥者负责安排复杂对象的建造次序。二、实现在src目录下新建一个builder文件夹在该文件夹下新建一个builder.cj文件和builder.drawio文件。类图核心代码package DesignPattern.builder // 产品 public class Car { // 底盘、座舱、智驾、车身 Car(private var _dp: String, private var _zc: String, private var _zj: String, private var _cs: String) {} } // 抽象建造者 public abstract class CarBuilder { var car Car(, , , ) protected func buildDp(): Unit protected func buildZc(): Unit protected func buildZj(): Unit protected func buildCs(): Unit func getCar(): Car { return car } } // 具体建造者 public class HuaWeiCarBulider : CarBuilder { protected func buildDp(){ println(底盘: 途灵底盘) } protected func buildZc(){ println(座舱: 鸿蒙座舱) } protected func buildZj(){ println(智驾: 乾坤智驾) } protected func buildCs(){ println(车身: 玄武车身) } } // 具体建造者 public class BYDCarBulider : CarBuilder { protected func buildDp(){ println(底盘: 云辇底盘) } protected func buildZc(){ println(座舱: DiLink座舱) } protected func buildZj(){ println(智驾: 天神之眼) } protected func buildCs(){ println(车身: CTB) } } public class CarDirector { public CarDirector(private var carBuilder: CarBuilder) {} public func construct(): Car { carBuilder.buildCs() carBuilder.buildDp() carBuilder.buildZc() carBuilder.buildZj() return carBuilder.getCar() } }测试代码package DesignPattern import DesignPattern.builder.* main(): Int64 { CarDirector(HuaWeiCarBulider()).construct() CarDirector(BYDCarBulider()).construct() return 0 }注意有时候也可以省略指挥者将指挥者里的方法与抽象建造者合并。核心代码package DesignPattern.builder // 产品 public class Car { // 底盘、座舱、智驾、车身 Car(private var _dp: String, private var _zc: String, private var _zj: String, private var _cs: String) {} } // 抽象建造者 public abstract class CarBuilder { protected var car Car(, , , ) protected func buildDp(): Unit protected func buildZc(): Unit protected func buildZj(): Unit protected func buildCs(): Unit public func construct(): Car { this.buildDp() this.buildZc() this.buildZj() this.buildCs() return car } } // 具体建造者 public class HuaWeiCarBulider : CarBuilder { protected func buildDp(){ println(底盘: 途灵底盘) } protected func buildZc(){ println(座舱: 鸿蒙座舱) } protected func buildZj(){ println(智驾: 乾坤智驾) } protected func buildCs(){ println(车身: 玄武车身) } } // 具体建造者 public class BYDCarBulider : CarBuilder { protected func buildDp(){ println(底盘: 云辇底盘) } protected func buildZc(){ println(座舱: DiLink座舱) } protected func buildZj(){ println(智驾: 天神之眼) } protected func buildCs(){ println(车身: CTB) } }测试代码package DesignPattern import DesignPattern.builder.* main(): Int64 { HuaWeiCarBulider().construct() println() BYDCarBulider().construct() return 0 }三、优缺点优点客户端不需要知道产品内部组成细节将产品本身与产品创建的细节进行解耦使得相同的创建过程可以创建不同产品对象每个具体构建者都相对独立互不影响增加新的构建者无需改动原有代码符合开闭原则。缺点建造者模式创建的产品一般有较多的共同点如果产品之间差异性大无法使用建造者模式如果产品内部变化复杂会导致系统变得很庞大增加系统理解难度。四、适用环境需要生产的产品对象包含多个成员变量需要生产的产品对象相互依赖对象的创建过程独立于创建该对象的类需要相同创建过程可以创建不同的产品。五、小结本章为大家详细的介绍了仓颉设计模式中建造者模式的内容下一章为大家带来建造者模式练习题的内容。最后创作不易如果大家觉得我的文章对学习仓颉设计模式有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家