设计模式——建造者模式

73 阅读2分钟

一、定义

建造者模式(生成器模式)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

二、通用代码

  1. 产品类
    通常是实现了模板方法模式,也就是有模板方法和基本方法
public class Product{
    public void doSomething(){
        //业务逻辑
    }
}
  1. 抽象建造者
    规范产品的组建,一般是由子类实现
public abstract class Builder{
    //设置各个产品不同的部分
    public abstract void setPart();
    //建造产品
    public abstract Product buildProduct();
}
  1. 具体建造者
    实现抽象类,并返回一个组建好的产品对象
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;
    }
}
  1. 导演类
    负责安排已有模块的顺序,并安排建造者开始创建对象
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();
    }
    
}
  1. 场景类
public class Client{
    public static void main(String[] args){
        Director director = new Director();
        
        Product aProduct1 = director.getAProduct1();
    }
}

三、 优点

  1. 封装性
  2. 建造者独立,容易扩展
  3. 便于控制细节风险

四、应用场景

  1. 相同的方法,不同的执行顺序,导致不同的结果
  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果不同
  3. 产品类非常复杂,或者产品类种的调用顺序不同产生了不同的效能

五、 注意

  1. 建造者模式关注的是零件类型和装配工艺(顺序),而工厂方法则重点在于创建零件