(15)建造者模式
阿新 • • 發佈:2021-12-01
概念
為了靈活構造複雜物件,該物件會有多個成員變數,在外部呼叫的時候,不需要或者不方便一次性創建出所有的成員變數,所以需要建造者模式。
建造者模式主要是為了把一個複雜的物件分步驟去建立。
比如要組裝電腦,電腦中有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 家庭版