原創作品,可以轉載,但是請標注出處地址:http://www.cnblogs.com/V1haoge/p/6553374.html
構建者模式,又稱建造者模式,將一部負責對象的構建分為許多小對象的構建,最后在整合構建的模式。
構建者模式一般用在構建流程或者組成部件固定的場合,將這些部件分開構建成為組件對象,再將這些組件對象整合成為目標對象。
最佳實例就是組裝台式電腦的情況,我們可以分別購買主板、CPU、內存、硬盤等部件,然后將這些部件組裝在一起就形成了一台完整的電腦。
參照如下類圖可以比較明顯了了解編碼如何實現構建者模式:
成員分析:
Director:控制者類,這是控制整個組合過程,在這個類內部有個Construct()方法,這個方法的作用就是通過調用Builder內部的各個組件的生成方法來完成組裝;
Builder:構建者接口,定義各部件生成的方法;
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電源
從上面的示例中也可以很清楚的看到各個類與接口之間的關系,通過示例和類圖就能夠輕松了解構建者模式的編碼結構,但是這種模式使用的場合限制較多,需要固定部件組合,一旦部件要增刪,就需要更改代碼。
同系列文章:
- Java設計模式之《適配器模式》及應用場景
- Java設計模式之《外觀模式》及應用場景
- Java設計模式之《橋接模式》及應用場景
- Java設計模式之《單例模式》及應用場景
- Java設計模式之《觀察者模式》及應用場景
- Java設計模式之《調停者模式》及應用場景
- Java設計模式之《代理模式》及應用場景
- Java設計模式之《職責鏈模式》及應用場景
- Java設計模式之《享元模式》及應用場景
- Java設計模式之《構建者模式》及應用場景
- Java設計模式之《模板模式》及使用場景
- Java設計模式之《裝飾器模式》及應用場景
- Java設計模式之《工廠方法模式》及使用場景
- Java設計模式之《抽象工廠模式》及使用場景