设计模式 - 生成器模式

186 阅读2分钟

设计模式 - 生成器模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

理解:构建,即对象生成的过程;表示,我觉得可能是生成对象调用的方法。

它在使用中,不需要像传统的new一个对象,然后传一堆参数。它只要一步一步调用已有的方法,既可以完成对象的构建。

例子:工厂流水线

制作一个罐头要经历许多步骤,而其中一些步骤比如制作罐头是通用的,可以用这个罐头装很多东西。

传统的方法:new 黄桃罐头(xx, xx, xx, xx);

生成器的方法: new Builder.组装罐头().放入红枣().build()。我们可以复用生成器最基础的函数 组装罐头() 将其用于创建不同的产品中,复用了组装基础能力。

好处:

  1. 对象无法被修改,保护了程序稳定性,减少了维护复杂度。
  2. 可以对参数关联进行一次性校验。
  3. 在创建对象之前不会存在中间态,即创建了对象实例,但缺少部分参数,这可能导致对象无法正确 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());

\