概念:
生成器模式也称之为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,构建与产品分离。
UML:
Ibuild接口清晰地反映了创建产品Product的流程。
生成器模式涉及4个关键角色:产品(Product),抽象生成器(IBuilder),具体生成器(Builder),指挥者(Director).
代码演示:
(1)定义1个产品类
public class Unit1{...}public class Unit2{...}public class Unit3{...}public class Product{ Unit1 u1; Unit2 u2; Unit3 u3;}
(2)定义n个生成器Builder类
public interface IBuild{ public void createUnit1(); public void createUnit2(); public void createUnit3(); public Product composite(); public Product create(); }public class BuildProduct implements IBuild{ Product p = new Product(); public void createUnit1(){ //p.u1 = ... } public Product create(){ return composite(); } ......}public class BuildProduct1 implements IBuild{ Product p = new Product(); public void createUnit1(){ //p.u1 = ... } ......}
(3)定义一个统一调度类也叫指挥者(Director).是对生成器接口IBuilder的封装。
public class Director{ private IBuild build; public Director(IBuild build){ this.build = buid; } public Product build(){ build.create(); } public static void main(){ IBuild build = new BuildProduct(); Director direcotr = new Director(build); Prodcut p = director.build(); }}
另一种实现方式:
利用Product1派生类方法,也可以实现类似的生成器功能。
代码演示:
//定义抽象生成器public abstract class Product{ Unit1 u1; Unit2 u2; .... abstract void createUnit1(); abstract void createUnit2(); ... abstract void composite();}//定义具体生成器public class BuildProduct extends Product{ void createUnit1() { u1=.... } .... void composite(){ /*关联 u1, u2, u3*/}}//定义指挥者类public class Director{ Product p; public Director(Product p) { this.p = p; } void build() { p.createUnit1(); p.createUnit2(); .... p.composite(); }}
总之,对于生成器模式创建复杂对象而言,主要原则是对象构造过程与表示相分离。