今天我來全面總結一下Android開發中最常用的設計模式 -外觀模式。
其他設計模式介紹 1分鐘全面了解“設計模式” 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(PRoxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析
定義了一個高層、統一的接口,外部與通過這個統一的接口對子系統中的一群接口進行訪問。
通過創建一個統一的類,用來包裝子系統中一個或多個復雜的類,客戶端可以通過調用外觀類的方法來調用內部子系統中所有方法
如下圖:
給個網站的導航例子你就懂了:以前我需要在搜索欄逐個搜索網站地址;有了網站導航(用了外觀模式)后,就方便很多了
接下來我用一個實例來對建造者模式進行更深一步的介紹。 a. 實例概況
背景:小成的爺爺已經80歲了,一個人在家生活:每次都需要打開燈、打開電視、打開空調;睡覺時關閉燈、關閉電視、關閉空調;沖突:行動不方便,走過去關閉那么多電器很麻煩,代碼如下:1. 電器類:
//燈類public class SubSystemA_Light { public void on(){ System.out.println("打開了燈...."); } public void off(){ System.out.println("關閉了燈...."); } } //電視類public class SubSystemB_Television { public void on(){ System.out.println("打開了電視...."); } public void off(){ System.out.println("關閉了電視...."); } } //空調類public class SubSystemC_Aircondition { public void on(){ System.out.println("打開了電視...."); } public void off(){ System.out.println("關閉了電視...."); } }2. 客戶端調用:小成爺爺使用電器情況
public class Facade Pattern{ public static void main(String[] args){ { SubSystemA_Light light = new SubSystemA_Light(); SubSystemB_Television television = new SubSystemB_Television(); SubSystemC_Aircondition aircondition = new SubSystemC_Aircondition(); //起床后開電器 System.out.prinln("起床了"); light.on(); television.on(); aircondition.on(); System.out.prinln("可以看電視了"); //睡覺時關電器 System.out.prinln("睡覺了"); light.off(); television.off(); aircondition.off(); System.out.prinln("可以睡覺了"); } }結果
起床了打開了燈打開了電視打開了空調可以看電視了睡覺了關閉了燈關閉了電視關閉了空調可以睡覺了從上面可以看出,在不使用外觀模式的情況下,小成爺爺需要對每個電器都進行操作,非常不方便
客戶端與三個子系統都發送了耦合,使得客戶端程序依賴與子系統
小成買了一個智能家具控制器(外觀對象/統一接口)給他爺爺,他爺爺只需要一鍵就能打開/關閉 燈、電視機、空調
即用外觀模式來為所有子系統設計一個統一的接口 客戶端只需要調用外觀類中的方法就可以了,簡化了客戶端的操作1. 電器類同上
2. 外觀類:智能遙控器
public class Facade{ SubSystemA_Light light; SubSystemB_Television television ; SubSystemC_Aircondition aircondition; //傳參 public Facade(SubSystemA_Light light,SubSystemB_Television television,SubSystemC_Aircondition aircondition){ this.light = light; this.television = television ; this.aircondition =aircondition; } //起床后一鍵開電器 public void on{ System.out.prinln("起床了"); light.on(); television.on(); aircondition.on(); } //睡覺時一鍵關電器 System.out.prinln("睡覺了"); light.off(); television.off(); aircondition.off(); } }3. 客戶端調用:爺爺使用智能遙控器的時候
public class Facade Pattern{ public static void main(String[] args){ { //實例化電器類 SubSystemA_Light light = new SubSystemA_Light(); SubSystemB_Television television = new SubSystemB_Television(); SubSystemC_Aircondition aircondition = new SubSystemC_Aircondition(); //傳參 Facade facade = new Facade(light,television,aircondition); //客戶端直接與外觀對象進行交互 facade.on; System.out.prinln("可以看電視了"); facade.off; System.out.prinln("可以睡覺了");結果
起床了打開了燈打開了電視打開了空調可以看電視了睡覺了關閉了燈關閉了電視關閉了空調可以睡覺了在全面解析完后,我來分析下其優缺點:
降低了客戶類與子系統類的耦合度,實現了子系統與客戶之間的松耦合關系
只是提供了一個訪問子系統的統一入口,并不影響用戶直接使用子系統類 減少了與子系統的關聯對象,實現了子系統與客戶之間 的松耦合關系,松耦合使得子系統的組件變化不會影響到它的客戶。外觀模式對客戶屏蔽了子系統組件,從而簡化了接口,減少了客戶處理的對象數目并使子系統的使用更加簡單。
引入外觀角色之后,用戶只需要與外觀角色交互; 用戶與子系統之間的復雜邏輯關系由外觀角色來實現降低原有系統的復雜度和系統中的編譯依賴性,并簡化了系統在不同平臺之間的移植過程
因為編譯一個子系統一般不需要編譯所有其他的子系統。一個子系統的修改對其他子系統沒有任何影響,而且子系統內部變化也不會影響到外觀對象。
本文主要對外觀模式進行了全面介紹,接下來將介紹其他設計模式,有興趣可以繼續關注Carson_Ho的最易懂的設計模式解析筆記?。。?!
相關文章閱讀 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(Proxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析
新聞熱點
疑難解答