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