一、定义
建造者模式(生成器模式)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
二、通用代码
- 产品类
通常是实现了模板方法模式,也就是有模板方法和基本方法
public class Product{
public void doSomething(){
//业务逻辑
}
}
- 抽象建造者
规范产品的组建,一般是由子类实现
public abstract class Builder{
//设置各个产品不同的部分
public abstract void setPart();
//建造产品
public abstract Product buildProduct();
}
- 具体建造者
实现抽象类,并返回一个组建好的产品对象
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
public void setPart(){
//设置产品零件
product.set();
}
public Product buildProduct(){
return product;
}
}
public class ConcreteBuilder2 extends Builder{
private Product product = new Product();
public void setPart(){
//设置产品零件
product.set();
}
public Product buildProduct(){
return product;
}
}
- 导演类
负责安排已有模块的顺序,并安排建造者开始创建对象
public class Director{
private Builder builder1 = new ConcreteBuilder1();
private Builder builder2 = new ConcreteBuilder2();
//建造者1号构建A产品
public Product getAProduct1(){
builder1.setPart();
return builder1.buildProduct();
}
//建造者1号构建B产品
public Product getBProduct1(){
builder1.setPart();
return builder1.buildProduct();
}
//建造者2号构建A产品
public Product getAProduct2(){
builder2.setPart();
return builder1.buildProduct();
}
}
- 场景类
public class Client{
public static void main(String[] args){
Director director = new Director();
Product aProduct1 = director.getAProduct1();
}
}
三、 优点
- 封装性
- 建造者独立,容易扩展
- 便于控制细节风险
四、应用场景
- 相同的方法,不同的执行顺序,导致不同的结果
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果不同
- 产品类非常复杂,或者产品类种的调用顺序不同产生了不同的效能
五、 注意
- 建造者模式关注的是零件类型和装配工艺(顺序),而工厂方法则重点在于创建零件