原創做品,能夠轉載,可是請標註出處地址:http://www.cnblogs.com/V1haoge/p/6553374.htmlhtml
構建者模式,又稱建造者模式,將一部負責對象的構建分爲許多小對象的構建,最後在整合構建的模式。java
構建者模式通常用在構建流程或者組成部件固定的場合,將這些部件分開構建成爲組件對象,再將這些組件對象整合成爲目標對象。設計模式
最佳實例就是組裝臺式電腦的狀況,咱們能夠分別購買主板、CPU、內存、硬盤等部件,而後將這些部件組裝在一塊兒就造成了一臺完整的電腦。ide
參照以下類圖能夠比較明顯了了解編碼如何實現構建者模式:測試
成員分析:ui
Director:控制者類,這是控制整個組合過程,在這個類內部有個Construct()方法,這個方法的做用就是經過調用Builder內部的各個組件的生成方法來完成組裝;編碼
Builder:構建者接口,定義各部件生成的方法;spa
ConcreteBuilder:具體構建者類:實現Builder構建者接口,具體定義如何生成各個部件;依賴於Product成品類,其中還有獲取成品組裝結構的方法GetResult()方法;設計
Product:成品類代理
如今咱們就以組裝臺式機爲例來進行編碼實現:
Builder:構建接口
1 public interface Builder { 2 void build_CPU(); 3 void build_mainboard(); 4 void build_memory(); 5 void build_DISK(); 6 void build_power(); 7 Computer getComputer(); 8 }
ComputerBuilder:電腦構建類
1 public class ComputerBuilder implements Builder { 2 private Computer computer = new Computer(); 3 @Override 4 public void build_CPU() { 5 computer.parts.add("採用INTEL的CPU"); 6 } 7 @Override 8 public void build_mainboard() { 9 computer.parts.add("採用大型主版"); 10 } 11 @Override 12 public void build_memory() { 13 computer.parts.add("採用8G內存"); 14 } 15 @Override 16 public void build_DISK() { 17 computer.parts.add("採用1TB固態硬盤"); 18 } 19 @Override 20 public void build_power() { 21 computer.parts.add("採用XXX電源"); 22 } 23 @Override 24 public Computer getComputer() { 25 return computer; 26 } 27 }
Director:組裝類
1 public class Director { 2 public void construct(Builder builder){ 3 builder.build_CPU(); 4 builder.build_mainboard(); 5 builder.build_memory(); 6 builder.build_DISK(); 7 builder.build_power(); 8 } 9 }
Computer:成品類
1 import java.util.*; 2 3 public class Computer { 4 List<String> parts = new ArrayList<String>(); 5 public void show(){ 6 for(String s:parts){ 7 System.out.println(s); 8 } 9 } 10 }
Clienter:測試類
1 public class Clienter { 2 public static void main(String[] args) { 3 Builder builder = new ComputerBuilder(); 4 Director director = new Director(); 5 director.construct(builder); 6 builder.getComputer().show(); 7 } 8 }
執行結果:
採用INTEL的CPU
採用大型主版
採用8G內存
採用1TB固態硬盤
採用XXX電源
從上面的示例中也能夠很清楚的看到各個類與接口之間的關係,經過示例和類圖就可以輕鬆瞭解構建者模式的編碼結構,可是這種模式使用的場合限制較多,須要固定部件組合,一旦部件要增刪,就須要更改代碼。
同系列文章: