-
外觀模式的目的在於如何簡化接口,可以將多個類的複雜的一切隱藏在背後,值顯露一個乾淨美觀的外觀。
-
所謂的外觀模式就是提供一個統一的接口,用來訪問子系統中的一羣接口。
-
外觀模式定義了一個高級接口,讓子系統更容易使用,
-
外觀模式的UML圖
-
外觀模式的代碼實現
-
創建3個子部件
/** * 子系統角色:空調 */ public class Air { public void open(){ System.out.println("開空調"); } public void shutDown(){ System.out.println("關空調"); } }
/** * 子系統角色:燈 */ public class Light { public void open(){ System.out.println("開燈"); } public void shutDown(){ System.out.println("關燈"); } }
/** * 子系統角色:電視 */ public class Tv { public void open(){ System.out.println("開電視"); } public void shutDown(){ System.out.println("關電視"); } }
-
創建外觀類
/** * 包裝了子部件,隱藏了子部件 */ public class Facade { private Air air; private Tv tv; private Light light; public Facade(Air air, Tv tv, Light light) { this.air = air; this.tv = tv; this.light = light; } //一鍵打開 public void allOpen(){ air.open(); tv.open(); light.open(); } public void allDown(){ air.shutDown(); tv.shutDown(); light.shutDown(); } }
-
創建測試類
public class Test { public static void main(String[] args) { Air air = new Air(); Tv tv = new Tv(); Light light = new Light(); Facade facade = new Facade(air, tv, light); facade.allOpen(); facade.allDown(); } }
-
-
外觀模式的優點
- 使客戶對系統的使用變簡單了,減少了與子系統的關聯對象,實現了子系統與客戶之間的鬆耦合關係。
- 只是提供了一個訪問子系統的統一入口,並不影響用戶直接使用子系統類
- 降低了大型軟件系統中的編譯依賴性,並簡化了系統在不同平臺之間的移植過程
-
外觀模式的缺點
- 不能很好的限制客戶使用子系統類,如果對客戶訪問子系統做太多的限制會減少系統的可變性和靈活性
- 在不映入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶類端的源代碼,違背了”開閉原則“
-
外觀模式的使用場景
- 當要爲一個複雜子系統提供一個簡單接口時可以使用外觀模式
- 客戶端與多個子系統之間存在很大的依賴性,引入外觀模式將子系統與客戶以及其他子系統解耦,可以提高子系統的獨立性和可移植性。
設計模式--外觀模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.