標籤:面板模式 設計模式
什麼是面板模式?
面板模式(Facade),為子系統中的一組介面提供一個一致的介面,定義一個高層介面,這個介面使得這一子系統更加容易使用。
簡單點說:面板模式是一種使用頻率非常高的結構型設計模式,它通過引入一個外觀角色來簡化用戶端與子系統之間的互動,為複雜的子系統調用提供一個統一的入口,降低子系統與用戶端的耦合度,且用戶端調用非常方便。
概述:
在真實的應用系統中,一個子系統可能由很多類組成。子系統的客戶為了它們的需要,需要和子系統中的一些類進行互動。客戶和子系統的類進行直接的互動會導致用戶端對象和子系統之間高度耦合。任何的類似於對子系統中類的介面的修改,會對依賴於它的所有的客戶類造成影響。
從上面面板模式的定義我們看以看到面板模式能很好的解決上述問題,為子系統提供了一個更高層次、更簡單的介面,從而降低了子系統的複雜度和依賴。這使得子系統更便於使用和管理。
外觀是一個能為子系統和客戶提供簡單介面的類。當正確的套用面板,客戶不再直接和子系統中的類互動,而是與外觀互動。外觀承擔與子系統中類互動的責任。實際上,外觀是子系統與客戶的介面,這樣面板模式降低了子系統和客戶的耦合度。
執行個體:
下面用一個簡單的例子來說明面板模式:
結構圖:
子系統類通常是一些業務類,實現了一些具體的、獨立的業務功能,其典型代碼如下:
class One{ public void MethodA(){ System.out.println( "methodA--> is runing" ); }}class Two{ public void MethodB(){ System.out.println( "methodB--> is runing" ); }}class Three{ public void MethodC(){ System.out.println( "methodC--> is runing" ); }}class Four{ public void MethodD(){ System.out.println( "methodD--> is runing" ); }}
在引入外觀類之後,與子系統業務類之間的互動統一由外觀類來完成,在外觀類中通常存在如下代碼:
class Facade{ private One obj1 = new One(); private Two obj2 = new Two(); private Three obj3 = new Three(); private Four obj4 = new Four(); public void Method1(){System.out.println("方法組1"); obj1.MethodA(); obj2.MethodB(); obj3.MethodC(); }public void Method2(){System.out.println("方法組2"); obj1.MethodA(); obj2.MethodB();obj4.MethodD(); }}
由於在外觀類中維持了對子系統對象的引用,用戶端可以通過外觀類來間接調用子系統對象的業務方法,而無須與子系統對象直接互動。引入外觀類後,用戶端代碼變得非常簡單,典型代碼如下:
class Program{ static void Main(string[] args){ Facade facade = new Facade(); facade.Method1();facade.Method2(); }}
何時使用面板模式?
第一:設計初期階段,有意識的將不同的兩個層分離,層與層之間建立外觀Facade,這樣就可以為複雜的子系統提供一個簡單的介面,耦合性降低。
第二:在開發階段,子系統往往因為不斷的重構演化而變的越來越複雜,增加外觀Facade可以提供一個簡單的介面,減少它們之間的依賴性.
第三:維護一個大型系統時,可能這個系統已經非常難以維護和擴充,此時可以為系統新開發一個Facade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單介面,讓新系統與Facade對象互動,Facade與遺留代碼互動所有複雜的工作。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
設計模式 --面板模式(Facade)