建造者模式

139 阅读1分钟

定义

将一个复杂对象的构建与它的表示分离,同样的构建过程创建不同的表示

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();
    }
}

优点 封装性

建造者独立易扩展

使用场景

相同的方法不同执行顺序
多个零部件装配到一个对象中
产品类复杂,但是调用顺序,或者需要不同的配置

与工厂模式

与工厂模式最大的区别在于控制产品类