设计模式-建造者模式
建造者模式
定义:将一个复杂对象的构造与他的表示分离,使同样的构建过程可以创建不同的表示。
使用场景:一些基本部件不变,但是组合经常变化。就比如肯德基套餐很多样,但是都是可乐、汉堡、鸡腿、鸡翅等组成的。
使用实例:Java中的StringBuilder
建造者模式的主要角色如下:
- 产品 (Product) :要创建的复杂对象
- 抽象建造者(Builder):提供创建产品各个子部件的抽象方法,通常还包含一个返回复杂产品的方法
- 具体建造者(Concrete): 实现Builder接口,完成复杂产品的各个部件的具体创建方法
- 指挥者(Director):它调用建造者对象中的方法进行产品创建。
代码示例:
public abstract class Builder {
protected Product product=new Product();
abstract void buildPartA();
abstract void buildPartB();
abstract void buildPartC();
Product getResult(){
return product;
}
}
public class ConcreteBuilder extends Builder {
@Override
public void buildPartA() {
product.setPartA("组成A部分");
}
@Override
public void buildPartB() {
product.setPartB("组成B部分");
}
@Override
public void buildPartC() {
product.setPartC("组成C部分");
}
}
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct(){
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
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;
}
public void show(){
System.out.println("Product{" +
"partA='" + partA + '\'' +
", partB='" + partB + '\'' +
", partC='" + partC + '\'' +
'}');
}
}
测试代码:
public static void main(String[] args) {
Builder builder=new ConcreteBuilder();
Director director=new Director(builder);
Product product = director.construct();
product.show();
}
书山有路勤为径,学海无涯苦作舟