【1】基本概念
外觀模式(Facade),為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
【2】簡單分析
我們先來看下該設計模式的UML結構圖:

【3】如何用java語言實現該設計模式:
由于該設計模式比較簡單,而且我們平時在開發項目的過程中經常會用到該設計模式的,我就不做過多的解析了,針對上面的UML結構圖分別貼出各個類的代碼:
3.1 SubSystemOne.java源碼:
[html] view plain copy package com.andyidea.patterns; public class SubSystemOne { public void methodOne(){ System.out.PRintln("子系統方法一"); } } 其實,SubSystemTwo.java ,SubSystemThree.java ,SubSystemFour.java的源碼和 SubSystemOne.java的源碼類似,只是方法內部輸出的內容不同,在這里本人就省略列出其它子系統類的源碼了。呵呵3.2 Facade.java 類源碼:
[html] view plain copy package com.andyidea.patterns; public class Facade { SubSystemOne subOne; SubSystemTwo subTwo; SubSystemThree subThree; SubSystemFour subFour; public Facade(){ subOne = new SubSystemOne(); subTwo = new SubSystemTwo(); subThree = new SubSystemThree(); subFour = new SubSystemFour(); } public void invokeMethodA(){ System.out.println("-------方法組A--------"); subOne.methodOne(); subTwo.methodTwo(); subThree.methodThree(); } public void invokeMethodB(){ System.out.println("-------方法組B--------"); subTwo.methodTwo(); subThree.methodThree(); subFour.methodFour(); } } 3.3 FacadeClient.java類源碼:[html] view plain copy package com.andyidea.patterns; public class FacadeClient { public static void main(String[] args) { Facade facade = new Facade(); //調用組件A facade.invokeMethodA(); //調用組件B facade.invokeMethodB(); } } 【4】何時使用外觀模式4.1 在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層構架,就需要考慮在數據訪問層和業務邏輯層,業務邏輯層和表示層的層與層之間建立外觀Facade,這樣可以為復雜的子系統提供一個簡單的接口,使得耦合大大降低。
4.2 在開發階段,子系統往往因為不斷的重構演化而變得越來越復雜,大多數的模式使用時也都會產生很多很小的類,這本是好事,但也給外部調用它們的用戶程序帶來了使用上的困難,增加外觀Facade可以提供一個簡單的接口,減少它們之間的依賴。
4.3 在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和擴展了,但因為它包含非常重要的功能,新的需求開發必須依賴于它。此時用外觀模式Facade也是非常合適的。例如可以開發一個外觀Facade類,來提供設計粗糙或高度復雜的遺留代碼的比較清晰簡單的接口,讓新系統與Facade對象交互,Facade與遺留代碼交互所有復雜的工作。
至此,我們應該對外觀模式有了解和何時使用該模式了吧,希望大家多多采用設計模式提高我們代碼的質量和提高維護性和擴展性。
本文為 Andy.Chen 原創,歡迎大家繼續關注Me的博文,歡迎大家轉載,謝謝!新聞熱點
疑難解答