一.简介
一个复杂的对象通常有一系列创建步骤,如汽车组装:车架、发动机、方向盘、轮胎等。
建造者模式可以很好处理需要多个创建步骤的对象创建,建造者模式将一个复杂的对象分解为多个简单的对象,再逐步构建。建造者模式注重部件的组装过程。
建造者(Builder)模式结构:
1.产品角色(Product):包含多个组成部件的复杂对象,由具体建造者来创建其各个部件。
2.抽象建造者(Builder):包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 build()。
3.具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
4.指挥者(Director):调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
二.实现
package com.vincent;
/**
* 产品对象
*/
class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA=partA;
}
public void setPartB(String partB) {
this.partB=partB;
}
public void setPartC(String partC) {
this.partC=partC;
}
}
/**
* 抽象构建者
*/
abstract class AbstructProductBuilder {
protected Product product=new Product();
public abstract AbstructProductBuilder buildPartA(String partA);
public abstract AbstructProductBuilder buildPartB(String partB);
public abstract AbstructProductBuilder buildPartC(String partC);
public Product build(){
return product;
}
}
/**
* 产品构建者
* 构建过程返回构建者对象,方便可以使用链式调用
*/
class ProductBuilder extends AbstructProductBuilder{
@Override
public AbstructProductBuilder buildPartA(String partA) {
product.setPartA(partA);
return this;
}
@Override
public AbstructProductBuilder buildPartB(String partB) {
product.setPartB(partB);
return this;
}
@Override
public AbstructProductBuilder buildPartC(String partC) {
product.setPartC(partC);
return this;
}
}
/**
* 构建指挥者
*/
class ProductDirector{
private AbstructProductBuilder builder;
public ProductDirector(AbstructProductBuilder builder) {
this.builder = builder;
}
public Product build(String partA,String partB,String partC){
builder.buildPartA(partA).buildPartB(partB).buildPartC(partC);
return builder.build();
}
}
三.总结
1.构建者模式关注复杂对象构建的各部件构建过程
2.对于构建的产品只有一类产品时可以省略抽象构建者、构建指挥者