建造者模式(Builder):将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示。
下面是Builder的结构图:
下面演示一个Demo:
创建一个产品类,由多个部件组成:
public class Product {
List<String> parts = new ArrayList<String>();
public void add(String part) {
parts.add(part);
}
public void show() {
System.out.println("产品创建:");
for(String str : parts)
System.out.println(str);
}
}
Builder接口:
public interface Builder {
public void buildPartA();
public void buildPartB();
public Product getResult();
}
两个具体的建造类:
class ConcreteBuilder1 implements Builder{
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件A");
}
@Override
public void buildPartB() {
product.add("部件B");
}
@Override
public Product getResult() {
return product;
}
}
class ConcreteBuilder2 implements Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件C");
}
@Override
public void buildPartB() {
product.add("部件D");
}
@Override
public Product getResult() {
return product;
}
}
Director指挥类:
public class Director {
public void construct(Builder builder) {
builder.buildPartA();
builder.buildPartB();
}
}
客户端:
public class Client {
public static void main(String[] args) {
Director director = new Director();
Builder builder1 = new ConcreteBuilder1();
Builder builder2 = new ConcreteBuilder2();
director.construct(builder1);
Product product1 = builder1.getResult();
product1.show();
director.construct(builder2);
Product product2 = builder2.getResult();
product2.show();
}
}