生成器模式将一个复杂对象的构建跟他的表示分离,使得同样的构建过程可以创建不同的表示。在以下情况下考虑使用生成器模式:
1.当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。
该设计模式需要一个Builder,它为创建一个Product对象的各个组件指定抽象接口,ConceteBuider实现Builder接口以构造和装配产品的各个部件,定义并明确他所创建的表示,提供一个检索的窗口。Diretor构造一个使用Builder接口的对象,Product表示被构造的复杂对象,包含所定义组成部件的类,包括把这些部件装配成最终产品的接口。
Java实现的代码如下:
interface Builder{
void buildPart();
Product getResult();
}
class ConcreteBuilder implements Builder{
Random rand=new Random();
Product product=new Product();
public void buildPart(){
product.set(rand.nextInt(10));
}
public Product getResult(){
return product;
}
}
class Product{
private int id;
public void set(int id){
this.id=id;
}
public void run(){
System.out.println("Create a Id:"+id+" Product");
}
}
class Diretor{
public void Construct(Builder builder){
builder.buildPart();
}
}
public class Test{
public static void main(String[] args){
Builder cr=new ConcreteBuilder();
Diretor dt=new Diretor();
dt.Construct(cr);
cr.getResult().run();
}
}
抽象工厂模式与生成器模式类似,他们的主要区别是生成器模式注重于一步步构造复杂的对象,而抽象工厂模式注重于多个系列产品对象。生成器在最后一步返回产品,而抽象工厂是立即返回的。