建造者模式
GOF对建造者模式的定义是:“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.”
public abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
public class Product
{
ArrayList<String> parts = new ArrayList<String>();
public void Add(String part)
{
parts.add(part);
}
public void Show()
{
System.out.println("create product");
for(int i = 0;i<parts.size();i++) {
String part = parts.get(i);
System.out.println(part);
}
}
}
//具体的建造者类
public class ConcreteBuilderA extends Builder
{
private Product product = new Product();
@override
public void BuildPartA()
{
product.Add("part A");
}
@override
public void BuildPartB()
{
product.Add("part B");
}
@override
public Product GetResult()
{
return product;
}
}
public class ConcreteBuilderB extends Builder
{
private Product product = new Product();
@override
public void BuildPartA()
{
product.Add("part W");
}
@override
public void BuildPartB()
{
product.Add("part Z");
}
@override
public Product GetResult()
{
return product;
}
}
//指挥者类
public class Director {
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
建造者的作用是隐藏产品的组装过程,如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以达到目的。
建造者模式是面向对象中“多态”的一个好应用。
工厂模式侧重点在于将对象的实例化延迟到子类中,创建者的侧重点则是保持一个对象创建过程的稳定性。
工厂模式专注于创造相同表象的对象,当需要得到具有多种表象的实例时,建造者模式才是好选择、