问题:
当我们要创建的对象很复杂的时候(一般是由很多其它的对象组合而成),最好将对象的创建和表示分离开来,这样做的好处就是通过一步步地进行复杂对象的创建而且每一步构造的过程引入不同的参数,使得相同的创建步骤可以得到不同的对象。
特别是一个对象的多个构造过程的顺序一定时,如构造过程A必须在构造过程B之前进行,建造模式是个不错的选择。
类图:
Rose图像就是插入不了,郁闷!!!把颜色去掉竟然可以了,哈
源码实现:
public class Director {
private Builder builder;
public Product Construct()
{
builder = new ConcreteBuilder();
builder.BuildPartA("ActualParaA");
builder.BuildPartB("ActualParaB");
builder.BuildPartC("ActualParaC");
return builder.getProduct();
}
}
public abstract class Builder
{
public abstract void BuildPartA(String strParaA);
public abstract void BuildPartB(String strParaB);
public abstract void BuildPartC(String strParaC);
public abstract Product getProduct();
}
public class ConcreteBuilder extends Builder
{
private Product product = new Product();
public void BuildPartA(String strParaA)
{
product.setParaA(strParaA);
System.out.println("product.setParaA(strParaA)...");
}
public void BuildPartB(String strParaB)
{
product.setParaB(strParaB);
System.out.println("product.setParaB(strParaB)...");
}
public void BuildPartC(String strParaC)
{
product.setParaC(strParaC);
System.out.println("product.setParaC(strParaC)...");
}
public Product getProduct()
{
System.out.println("return product");
return product;
}
}
public class Product
{
private String paraA;
private String paraB;
private String paraC;
public String getParaA()
{
return this.paraA;
}
public void setParaA(String strParaA)
{
this.paraA = strParaA;
}
public String getParaB()
{
return this.paraB;
}
public void setParaB(String strParaB)
{
this.paraB = strParaB;
}
public String getParaC()
{
return this.paraC;
}
public void setParaC(String strParaC)
{
this.paraC = strParaC;
}
}
public class Client
{
public static void main(String[] args)
{
Director director = new Director();
Product product = director.Construct();
System.out.println("product.paraA=" + product.paraA);
System.out.println("product.paraB=" + product.paraB);
System.out.println("product.paraC=" + product.paraC);
}
}
总结:
[GOF95]中,Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说Builder模式中对象不是直接返回的。而在AbstractFactory模式中对象是直接返回的,AbstractFactory模式强调的是为创建多个相互依赖的对象提供一个同一的接口。