04.(建立型模式)java設計模式之建造者模式
阿新 • • 發佈:2022-12-07
一、什麼是建造者模式
- 使⽤多個簡單的物件⼀步⼀步構建成⼀個複雜的物件,將⼀個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
- 允許⽤戶只通過指定複雜物件的型別和內容就可以構建它們,不需要知道內部的具體構建細節。
二、建造者的實現方式
模式結構分析:
Product(具體產品類):產品⻆⾊。
Builder(抽象建造類):抽象建造者,定義多個通⽤⽅法和構建⽅法。
ConcreteBuilder(具體建造類):具體建造者,可以有多個。
Director(指揮者類):指揮者,控制整個組合過程,將需求交給建造者,由建造者去建立物件。
類關係圖:
統一模型:
程式碼實現:
檢視程式碼
/* * 建造者中具體的產品資訊 * */ @Data public class Computer { private String memory; private String cpu; private String mainboard; private String disk; private String power; } /* * 抽象建造者 * */ public interface IComputerBuilder { void buildCpu(); void buildMainboard(); void buildDisk(); void buildPower(); void buildMemory(); Computer createComputer(); } /* * 具體建造者 * */ public class HighComputerBuilder implements IComputerBuilder{ Computer computer; public HighComputerBuilder(){ computer=new Computer(); } @Override public void buildCpu() { computer.setCpu("這個是高配的CPU……"); } @Override public void buildMainboard() { computer.setMainboard("這個是高配的主機板……"); } @Override public void buildDisk() { computer.setDisk("這個是高配的硬碟……"); } @Override public void buildPower() { computer.setPower("這個是高配的電源……"); } @Override public void buildMemory() { computer.setMemory("這個是高配的記憶體……"); } @Override public Computer createComputer() { return computer; } } /* * 具體建造者 * */ public class LowerComputerBuilder implements IComputerBuilder{ Computer computer; public LowerComputerBuilder(){ computer=new Computer(); } @Override public void buildCpu() { computer.setCpu("這個是低配的CPU……"); } @Override public void buildMainboard() { computer.setMainboard("這個是低配的主機板……"); } @Override public void buildDisk() { computer.setDisk("這個是低配的硬碟……"); } @Override public void buildPower() { computer.setPower("這個是低配的電源……"); } @Override public void buildMemory() { computer.setMemory("這個是低配的記憶體……"); } @Override public Computer createComputer() { return computer; } } /* * 指揮者,控制整個組合過程,將需求交給建 造者,由建造者去建立物件 * */ public class ComputerDirector { public Computer createCompany(IComputerBuilder builder){ builder.buildMemory(); builder.buildCpu(); builder.buildMainboard(); builder.buildDisk(); builder.buildPower(); return builder.createComputer(); } }
測試用例:
/*
* 建造者模式的使用場景中的案例
* */
@Test
public void Builder(){
IComputerBuilder builder=new HighComputerBuilder();
ComputerDirector director=new ComputerDirector();
Computer computer=director.createCompany(builder);
System.out.println(computer.toString());
}
測試結果:
Computer(memory=這個是高配的記憶體……, cpu=這個是高配的CPU……, mainboard=這個是高配的主機板……, disk=這個是高配的硬碟……, power=這個是高配的電源……)
方法評估:
優點:
-
- 客戶端不必知道產品內部組成的細節,將產品本身與產品的建立過程解耦。
- 每⼀個具體建造者都相對獨⽴,⽽與其他的具體建造者⽆關,更加精細地控制產品的建立過程。
- 增加新的具體建造者⽆須修改原有類庫的程式碼,符合開閉原則。
- 建造者模式結合鏈式程式設計來使⽤,程式碼上更加美觀。
缺點:
-
- 建造者模式所建立的產品⼀般具有較多的共同點,如果產品差異⼤則不建議使⽤。
三、彙總
建造者模式與抽象⼯⼚模式的⽐較:
建造者模式返回⼀個組裝好的完整產品 , 抽象⼯⼚模式返回⼀系列相關的產品,這些產品位於不同的產品等級結構,構成了⼀個產品族。