设计模式(4)生成器模式
生成器模式
情景
假设有这样一个复杂对象,在对其进行构造的时候需要对诸多成员变量和嵌套对象进行繁复的初始化工作。
比如一个house,我们需要考虑创造Wall、Door、Window等等。这样创建house的时候就会变得非常复杂。因此我们引入生成器模式。
生成器模式
生成器模式建议将对象构造代码从产品类中抽取出来, 并将其放在一个名为生成器的独立对象中。
比如说,House类当中我们可以将对象构造的过程分解为几个函数,比如BuildWall(),BuildDoor()等函数。
所以他会有以下结构:
-
生成器 (Builder) 接口声明在所有类型生成器中通用的产品构造步骤。
-
具体生成器 (Concrete Builders) 提供构造过程的不同实现。 具体生成器也可以构造不遵循通用接口的产品。
-
产品 (Products) 是最终生成的对象。 由不同生成器构造的产品无需属于同一类层次结构或接口。
-
主管 (Director) 类定义调用构造步骤的顺序, 这样你就可以创建和复用特定的产品配置。
-
客户端 (Client) 必须将某个生成器对象与主管类关联。 一般情况下, 你只需通过主管类构造函数的参数进行一次性关联即可。 此后主管类就能使用生成器对象完成后续所有的构造任务。 但在客户端将生成器对象传递给主管类制造方法时还有另一种方式。 在这种情况下, 你在使用主管类生产产品时每次都可以使用不同的生成器。