将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示
代码如下:
product类:
public class Product {
List<String> li = new ArrayList<String>();
public void Add(String part){
li.add(part);
}
public void Show(){
System.out.println("产品都有:");
for (String parts : li) {
System.out.println("part:"+li);
}
}
}
Builder类
public abstract class Builder {
public abstract void BuilderA();
public abstract void BuilderB();
public abstract Product GetResult();
}
具体建造者类
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
public Product GetResult(){
return product;
}
@Override
public void BuilderA() {
// TODO Auto-generated method stub
product.Add("部件A");
}
@Override
public void BuilderB() {
// TODO Auto-generated method stub
product.Add("部件B");
}
}
public class ConcreteBuilder2 extends Builder{
private Product product = new Product();
@Override
public void BuilderA() {
// TODO Auto-generated method stub
product.Add("部件X");
}
@Override
public void BuilderB() {
// TODO Auto-generated method stub
product.Add("部件Y");
}
@Override
public Product GetResult() {
// TODO Auto-generated method stub
return product;
}
}
指挥者类:
public class Director {
public void Construct(Builder builder){
builder.BuilderA();
builder.BuilderB();
}
public void Director() {
}
}
客户端代码:
public class t1 {
public static void main(String[] args) {
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();
}
}
运行结果如下: