定义
将一个复杂对象的构建与它的表示分离,同样的构建过程创建不同的表示
Product产品
通常是实现了模板方法模式
Builder抽象建造者
规范产品组件
ConcreteBuilder
实现Builder的方法并建造好对象
Director导演
负责已有模块顺序,然后告诉Builder开始创建
public class Product{
public void doSomething(){
//具体业务
}
}
public abstract class Builder{
//设置产品的不同部分,获取不同的产品
public abstract void setPart();
//建造产品
public abstract Product buildProduct();
}
//如果有很多类型,就需要很多的builder建造不同的产品
public class ConcreteBuilder extends Builder{
private Product product = new Product();
//设置产品的不同部分,获取不同的产品
public abstract void setPart(){
//设置产品的内部逻辑,产品类中应该有控制逻辑
}
//建造产品
public abstract Product buildProduct(){
return product;
}
}
//导演类
public class Director{
//不同的产品类型创建不同的builder
private ConcreteBuilder concreteBuilder = new ConcreteBuilder();
//需要多少产品就需要需要多个获取方法
public Product getProduct(){
concreteBuilder.setPart(){
//设置builder建造逻辑每个方法是不一样的
}
//构建产品
return concreteBuilder.buildProduct();
}
}
优点 封装性
建造者独立易扩展
使用场景
相同的方法不同执行顺序
多个零部件装配到一个对象中
产品类复杂,但是调用顺序,或者需要不同的配置
与工厂模式
与工厂模式最大的区别在于控制产品类