创建型之建造者模式

序言

  建造者模式可以使客户端不需要知道产品有哪些组件,各组件是怎么生产的,最后是怎么装配组合的,只可以使程序更简洁,灵活。

  • 抽象建造者:包括组件构造方法和产品返回方法;产品有多少零件,就有多少build方法。
  • 具体建造者:实现产品组件的build方法
  • 导演者:提供产品的组合方法
  • 产品:具体类,包含组件及其getter,setter方法

建造者模式

建造者模式的结构如下图:

![](http://images2017.cnblogs.com/blog/946528/201708/946528-20170808225331167-1390111599.png)
> 套路: 创建1个与产品对应的builder类,创建产品成员变量,实现各组件的build方法,实现返回产品的方法。
/**
 * 具体产品
 */
public class Computer {
    private String cpu;
    private String keybord;
    private String mouse;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getKeybord() {
        return keybord;
    }

    public void setKeybord(String keybord) {
        this.keybord = keybord;
    }

    public String getMouse() {
        return mouse;
    }

    public void setMouse(String mouse) {
        this.mouse = mouse;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", keybord='" + keybord + '\'' +
                ", mouse='" + mouse + '\'' +
                '}';
    }
}
/**
 * builder接口
 * 1.提供build组件的方法,类似set方法
 * 2.提供返回产品的build方法,类似get方法
 */
public interface Builder {
    public Builder buildMouse(String mouseType);
    public Builder buildKeybord(String keybordType);
    public Computer build();
}
/**
 * 实现builer接口
 * 1.提供想要产品的成员变量
 * 2.在构造方法中,初始化必需参数
 * 3.build组件的方法中,初始化不必须参数
 */
public class ComputerBuilder implements Builder{

    private Computer computer;

    public ComputerBuilder(String cpuType){
        computer = new Computer();
        computer.setCpu(cpuType);
    }

    public Builder buildKeybord(String keybordType) {
        computer.setKeybord(keybordType);
        return this;
    }

    public Builder buildMouse(String mouseType) {
        computer.setMouse(mouseType);
        return this;
    }

    public Computer build() {
        return computer;
    }
}

吹牛: 建造者模式将产品的构建和组合的职责分割开来,适合创建具有多种约束条件的复杂对象,最简洁的用法是将Director角色去掉,在cient采用链式编程的方法,将其初始化。

后记

  转载时,注明出处是人格的一种体现。
  https://www.zybuluo.com/BertLee/note/843667
  能力有限,如有纰漏,请在评论区指出,老朽虽一把年纪,必当感激涕零,泪如雨下。

posted @ 2017-08-08 22:55  吃不了兜着走  阅读(128)  评论(0编辑  收藏  举报