将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
separate the construction of a complex object from its representation so that the same construction process can create different representations.

生成器模式的结构中包括四个角色。
+ 产品(product):具体生成器要构造的复杂对象。
+ 抽象生成器(abstract builder):抽象生成器是一个接口,该接口除了为创建一个product对象的各个组件定义了若干个方法外,还定义返回product对象的方法。
+ 具体生成器(concrete builder):实现builder接口的类,具体生成器将实现builder接口所定义的方法。
+ 指挥者(director):指挥者是一个类,该类需含有builder接口声明的变量。指挥者的职责是负责向用户提供具体生成器,即指挥者将请求具体生成器来构造用户所需要的product对象,如果所请求的具体生成器成功地构造出product对象,指挥者就可以让该具体生成器返回所构造的product对象。
生成器模式将对象的构造过程封装在具体生成器中,用户使用不同的具体生成器就可以得到该对象的不同表示。
生成器模式将对象的构造过程从创建对象的类中分离出来,使用户无需了解该对象的具体组件。
可以更加精细有效地控制对象的构造过程。生成器将对象的构造过程分解成若干步骤,这就使程序可以更加精细,有效地控制整个对象的构造。
生成器模式将对象的构造过程与创建该对象类解耦,使对象的创建更加灵活有弹性。
当增加新的具体生成器时,不必修改指挥者的代码,即该模式满足开-闭原则。
当系统准备为用户提供一个内部结构复杂的对象,而且在构造方法中编写创建该对象的代码无法满足用户需求时,就可以使用生成器模式来构造这样的对象。
当某些系统要求对象的构造过程必须独立于创建该对象的类时。
<a href="https://github.com/androidwolf">mygithub</a>