设计模式之创建者模式

187 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

创建者设计模式

分离对象子组件的单独构造(由Buider来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。

​ 由于实现构造和装配的解耦。不同的构造器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。

​ 最典型的就是我们的StringBuilder和StringBuffer。

建造者模式包含如下角色:

  • Builder:抽象建造者
  • ConcreteBuilder:具体建造者
  • Director:指挥者
  • Product:产品角色
    下面通过代码进行介绍。

computer类,创建方法很简单,就是一个简单的实体类。这个类在这里就好比我们要做电脑,买了几个主件,键盘啊、cpu啊主板啊什么都。

/**
 * @ClassName 复杂的computer类
 * @Description :创建者设计模式
 **/
public class Computer {
    private String mouse;
    private String keyboard;
    private String cpu;
    private String memeoryBank;
    private String mainBoard;

    @Override
    public String toString() {
        return "Computer{" +
                "mouse='" + mouse + ''' +
                ", keyboard='" + keyboard + ''' +
                ", cpu='" + cpu + ''' +
                ", memeoryBank='" + memeoryBank + ''' +
                ", mainBoard='" + mainBoard + ''' +
                '}';
    }

    public String getMouse() {
        return mouse;
    }

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

    public String getKeyboard() {
        return keyboard;
    }

    public void setKeyboard(String keyboard) {
        this.keyboard = keyboard;
    }

    public String getCpu() {
        return cpu;
    }

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

    public String getMemeoryBank() {
        return memeoryBank;
    }

    public void setMemeoryBank(String memeoryBank) {
        this.memeoryBank = memeoryBank;
    }

    public String getMainBoard() {
        return mainBoard;
    }

    public void setMainBoard(String mainBoard) {
        this.mainBoard = mainBoard;
    }

}

买了这些主件后,要组装一台电脑还有很多复杂的程序,我们可以卸载builder里面,完成这些工序。

/**
 * @Description :用于创建computer
 **/
public class Builder {
    private final Computer computer =new Computer();
    public Builder buildMouse(String type){
        computer.setMouse("安装了"+ type + "鼠标");
        return this;
    }
    public Builder buildKeyboard(String type){
        computer.setKeyboard("安装了"+ type + "键盘");
        return this;
    }
    public Builder buildCPU(String type){
        computer.setCpu("安装了"+ type + "CPU");
        return this;
    }
    public Builder buildMainBoard(String type){
        computer.setMainBoard("安装了"+ type + "主板");
        return this;
    }
    public Builder buildMemeoryBank(String type){
        computer.setMemeoryBank("安装了"+ type + "鼠标");
        return this;
    }
    public Computer bulid(){
        return computer;
    }
}

当这些固定的加工手续定义好之后,下面就该制作生产了。下面这个测试类就按工序一步一步把电脑给我们组装好了。

/**
 * @ClassName 测试创建者模式创建东西
 * @Description
 * @Author:liyunzhi
 * @Date
 * @Version 1.0
 **/
public class BuilderTest {
    public static void main(String[] args) {
        Computer computer = new Builder()
                .buildMainBoard("华硕")
                .buildCPU("i9-11100")
                .buildMemeoryBank("金士顿")
                .buildKeyboard("联想")
                .buildMouse("华为")
                .bulid();
        System.out.println(computer);
    }
}