前言
将一个复杂对象的构建层与表示层互相分离,同样的构建过程可采用不同的表示。
虽然建造者模式也是为了创建一个对象,但该模式更专注与对象的一个创建过程,而之前所习🉐️的工厂类模式则专注于结果,更关注是创建对象的细节
通过将对象的不同组成部分,交由每个不同的对象来实现,也可以说这种模式所创建出来的对象是一个复合对象
⚠️ 这种方式在无形中会增加对象的复杂性,因此如果对象的颗粒度很小的话,或者模块之间的复用率很低并且变动不大的话,优先采用创建一整个对象。
意图: 将一个复杂的构建与其表示分离,使得同样的构建过程可以创建不同的表示
主要解决: 主要解决在软件系统中,有时候面临一个”复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临剧烈变化,但将他们组合在一起的算法却相对稳定
何时使用: 一些基本不见不会变,而其组合经常变化的时候
应用实例: 去M记,汉堡、可乐、薯条、炸鸡等基本不变,而其组合是经常变化的,从而生成出所谓的”套餐”
ES5代码
1 | // Picture.js 抽象图片信息类,包含卡片信息、组合方式信息 |
1 | function CardInfo(type) { |
1 | function AssembleInfo(position) { |
1 | // 组装对象属性方法 |
1 | var flowers = new NamePicture('triangle', 'center'); |
✨ 这里建造者模式关心的是如何组装Picture中的cardInfo以及assembleInfo属性,当然这里假如CardInfo比较复杂,那么可以根据之前的习得的工厂模式,将cardInfo属性交由工厂的实际例子去实现,因此会有
以下的一个工厂方法来生成不同的形状的CardInfo
1 | function NamePicture(cardInfo, assembleInfo) { |
优化后的ES6代码
暂无
最后更新: 2022年12月31日 07:37
原始链接: https://www.91temaichang.com/2022/03/05/builder-design-mode/