外觀模式內容相對簡單,就不寫新的例子了。本篇文章摘錄自 http://c.biancheng.net/view/1369.htmlhtml
外觀(Facade)模式的定義:是一種經過爲多個複雜的子系統提供一個一致的接口,而使這些子系統更加容易被訪問的模式。該模式對外有一個統一接口,外部應用程序不用關心內部子系統的具體的細節,這樣會大大下降應用程序的複雜度,提升了程序的可維護性。java
外觀(Facade)模式是「迪米特法則」的典型應用,它有如下主要優勢。.net
外觀(Facade)模式的主要缺點以下。設計
外觀(Facade)模式的結構比較簡單,主要是定義了一個高層接口。它包含了對各個子系統的引用,客戶端能夠經過它訪問各個子系統的功能。如今來分析其基本結構和實現方法。code
外觀(Facade)模式包含如下主要角色。htm
外觀模式的實現代碼以下:對象
//外觀角色 class Facade{ private SubSystem01 obj1=new SubSystem01(); private SubSystem02 obj2=new SubSystem02(); private SubSystem03 obj3=new SubSystem03(); public void method() { obj1.method1(); obj2.method2(); obj3.method3(); } } //子系統角色 class SubSystem01{ public void method1() { System.out.println("子系統01的method1()被調用!"); } } //子系統角色 class SubSystem02{ public void method2() { System.out.println("子系統02的method2()被調用!"); } } //子系統角色 class SubSystem03{ public void method3() { System.out.println("子系統03的method3()被調用!"); } }
程序運行結果以下:blog
public class FacadePattern{ public static void main(String[] args) { Facade f=new Facade(); f.method(); } } /** 子系統01的method1()被調用! 子系統02的method2()被調用! 子系統03的method3()被調用! **/
一般在如下狀況下能夠考慮使用外觀模式。接口
在外觀模式中,當增長或移除子系統時須要修改外觀類,這違背了「開閉原則」。若是引入抽象外觀類,則在必定程度上解決了該問題,其結構圖如圖 5 所示。get