(15)建造者模式

概念

为了灵活构造复杂对象,该对象会有多个成员变量,在外部调用的时候,不需要或者不方便一次性创建出所有的成员变量,所以需要建造者模式。

建造者模式主要是为了把一个复杂的对象分步骤去创建。
比如要组装电脑,电脑中有CPU/主板/显示器/内存卡等等很多的属性,如果使用构造方法去创建电脑,那会显得很复杂,因为new对象的时候需要传入很多的属性

实现方式

import lombok.Data;

/**
 * 建造者
 */
public class Demo {
    public static void main(String[] args) {
        Director director = new Director();
        Computer computer1 = director.createComputer(new HWComputerBuilder());
        System.out.println(computer1);

        Computer computer2 = director.createComputer(new XMComputerBuilder());
        System.out.println(computer2);
    }
}

// 最终产品,电脑
@Data
class Computer {
    private String name;
    private String cpu;
    private String systemType;

    @Override
    public String toString() {
        return "主机信息\n" +
                "设备名称:" + name + '\n' +
                "处理器:" + cpu + '\n' +
                "系统类型:" + systemType + '\n';
    }
}

// 抽象建造者,所有建造者都要实现该接口
interface Builder {
    void buildName();

    void buildCpu();

    void buildSystemType();

    Computer getComputer();
}

// 具体建造者,华为电脑建造者
class HWComputerBuilder implements Builder {
    private Computer c;

    public HWComputerBuilder() {
        this.c = new Computer();
    }

    @Override
    public void buildName() {
        c.setName("华为电脑");
    }

    @Override
    public void buildCpu() {
        c.setCpu("Intel(R) Core(TM)i7-10510U CPU1.8Hz~2.3Hz");
    }

    @Override
    public void buildSystemType() {
        c.setSystemType("Microsoft Windows 10 企业版 LTSC");
    }

    @Override
    public Computer getComputer() {
        return c;
    }
}

// 具体建造者,小米电脑建造者
class XMComputerBuilder implements Builder {
    private Computer c;

    public XMComputerBuilder() {
        this.c = new Computer();
    }

    @Override
    public void buildName() {
        c.setName("小米电脑");
    }

    @Override
    public void buildCpu() {
        c.setCpu("Intel(R) Core(TM)i9-10000 CPU2.3Hz~3.3Hz");
    }

    @Override
    public void buildSystemType() {
        c.setSystemType("Microsoft Windows 7 家庭版");
    }

    @Override
    public Computer getComputer() {
        return c;
    }
}

// 指挥者。指挥建造者如何建造电脑。
// 指挥者更像是一个电脑图纸,参数传入一个工人,工人根据图纸拼装电脑
class Director {
    public Computer createComputer(Builder builder) {
        builder.buildName();
        builder.buildCpu();
        builder.buildSystemType();
        return builder.getComputer();
    }
}

主机信息
设备名称:华为电脑
处理器:Intel(R) Core(TM)i7-10510U CPU1.8Hz~2.3Hz
系统类型:Microsoft Windows 10 企业版 LTSC

主机信息
设备名称:小米电脑
处理器:Intel(R) Core(TM)i9-10000 CPU2.3Hz~3.3Hz
系统类型:Microsoft Windows 7 家庭版

posted @ 2021-12-01 10:27  、嘎路的米。  阅读(28)  评论(0)    收藏  举报