一、意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以构建不同的表示。
二、适用性
在以下情况下使用Builder模式
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同的表示时。
三、结构
四、代码
Builder
public abstract class Builder {
abstract void buildPartA(String text);
abstract void buildPartB(String text);
abstract void buildPartC(String text);
abstract Product getResult();
}
具体的Builder
public class ConcreteBuilder extends Builder {
private String partA ;
private String partB;
private String partC;
@Override
void buildPartA(String text) {
this.partA = text;
}
@Override
void buildPartB(String text) {
this.partB = text;
}
@Override
void buildPartC(String text) {
this.partC = text;
}
@Override
Product getResult() {
Product product = new Product();
product.setPartA(partA);
product.setPartB(partB);
product.setPartC(partC);
return product;
}
}
Product
public class Product {
private String partA;
private String partB;
private String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
@Override
public String toString() {
return "Product{" +
"partA='" + partA + '\'' +
", partB='" + partB + '\'' +
", partC='" + partC + '\'' +
'}';
}
}
Director
public class Director {
private Builder mBuilder;
public Director(Builder builder){
this.mBuilder = builder;
}
public Product getProduct(){
return mBuilder.getResult();
}
}
Client
public class Client {
public static void main(String[] args){
Builder builder = new ConcreteBuilder();
builder.buildPartA("partA");
builder.buildPartB("partB");
builder.buildPartC("partC");
Director director = new Director(builder);
System.out.println(director.getProduct());
}
}
执行结果:
Product{partA='partA', partB='partB', partC='partC'}