设计模式 - 生成器模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
理解:构建,即对象生成的过程;表示,我觉得可能是生成对象调用的方法。
它在使用中,不需要像传统的new一个对象,然后传一堆参数。它只要一步一步调用已有的方法,既可以完成对象的构建。
例子:工厂流水线
制作一个罐头要经历许多步骤,而其中一些步骤比如制作罐头是通用的,可以用这个罐头装很多东西。
传统的方法:new 黄桃罐头(xx, xx, xx, xx);
生成器的方法: new Builder.组装罐头().放入红枣().build()。我们可以复用生成器最基础的函数 组装罐头() 将其用于创建不同的产品中,复用了组装基础能力。
好处:
- 对象无法被修改,保护了程序稳定性,减少了维护复杂度。
- 可以对参数关联进行一次性校验。
- 在创建对象之前不会存在中间态,即创建了对象实例,但缺少部分参数,这可能导致对象无法正确 work。
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
所谓构建与表示分离,就是指一个对象 Person 并不是简单的 new Person() 就可以实例化出来的,如果可以,那就是构建与表示一体。所谓构建与表示分离,就是指 Person 只能描述,而不能通过 new Person() 实例化,将实例化工作通过 Builder 实现,这样同样一个构建过程可以创建不同的 Person 实例。
class Director{
create(PeachBuilder){
PeachBuilder.createCan();
PeachBuilder.pushPeach();
return PeachBuilder.build();
}
}
class PeachBuilder{
createCan(){
console.log('创建了一个罐头');
}
pushPeach(){
console.log('放入黄桃');
}
build(){
return this;
}
}
const PeachCan = new Director().create(new PeachBuilder());
\