设计模式9:建造者模式
建造者模式用来将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
UML图:
我们希望获得拥有不同组件的Product,这时我们使用建造者模式,ConcreteBuilder1、2使用相同的接口,为Product加入不同组件。
Director类控制组装过程,最后返回Product实例。

代码:
Product类:
import java.util.ArrayList;
import java.util.List;
public class Product {
private List<String> parts = new ArrayList<>();
public void add(String s) {
parts.add(s);
}
public void show() {
for (String s: parts){
System.out.println(s);
}
}
}
Builder类及其子类:
public abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public Product getResult() {
return product;
}
}
public class ConcreteBuilder1 extends Builder {
@Override
public void buildPartA() {
product.add("part A");
}
@Override
public void buildPartB() {
product.add("part B");
}
}
public class ConcreteBuilder2 extends Builder {
@Override
public void buildPartA() {
product.add("part X");
}
@Override
public void buildPartB() {
product.add("part Y");
}
}
Director类:
public class Director {
private Builder builder = null;
public Director(Builder builder) {
this.builder = builder;
}
public Product getProduct(){
builder.buildPartA();
builder.buildPartB();
return builder.getResult();
}
}
Demo:
public class BuilderDemo {
public static void main(String[] args) {
Builder c1 = new ConcreteBuilder1();
Director d1 = new Director(c1);
Product p1 = d1.getProduct();
p1.show();
Builder c2 = new ConcreteBuilder2();
Director d2 = new Director(c2);
Product p2 = d2.getProduct();
p2.show();
}
}
浙公网安备 33010602011771号