1. 程式人生 > 其它 >(15)建造者模式

(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 家庭版