【1】基本概念
面板模式(Facade),為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
【2】簡單分析
我們先來看下該設計模式的UML結構圖:
【3】如何用java語言實現該設計模式:
由於該設計模式比較簡單,而且我們平時在開發項目的過程中經常會用到該設計模式的,我就不做過多的解析了,針對上面的UML結構圖分別貼出各個類的代碼:
3.1 SubSystemOne.java源碼:
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 類源碼:
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類源碼:
package com.andyidea.patterns;public class FacadeClient {public static void main(String[] args) {Facade facade = new Facade();//調用組件Afacade.invokeMethodA();//調用組件Bfacade.invokeMethodB();}}
【4】何時使用面板模式
4.1 在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層構架,就需要考慮在資料訪問層和商務邏輯層,商務邏輯層和展示層的層與層之間建立外觀Facade,這樣可以為複雜的子系統提供一個簡單的介面,使得耦合大大降低。
4.2 在開發階段,子系統往往因為不斷的重構演化而變得越來越複雜,大多數的模式使用時也都會產生很多很小的類,這本是好事,但也給外部調用它們的使用者程式帶來了使用上的困難,增加外觀Facade可以提供一個簡單的介面,減少它們之間的依賴。
4.3 在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和擴充了,但因為它包含非常重要的功能,新的需求開發必須依賴於它。此時用面板模式Facade也是非常合適的。例如可以開發一個外觀Facade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單的介面,讓新系統與Facade對象互動,Facade與遺留代碼互動所有複雜的工作。
至此,我們應該對面板模式有瞭解和何時使用該模式了吧,希望大家多多採用設計模式提高我們代碼的品質和提高維護性和擴充性。
本文為 Andy.Chen 原創,歡迎大家繼續關注Me的博文,歡迎大家轉載,謝謝!