Facade模式要求一個子系統的外部與其內部的通訊必須經過一個統一的Facade對象進行。Facade模式提供一個高層次的接口,使得子系統更易於使用。 java
就如同醫院的接待員同樣,Facade模式的Facade類將客戶端與子系統的內部複雜性分隔開,使得客戶端只須要與Facade對象打交道,而不須要與子系統內部的不少對象打交道。 設計模式
觀察者模式的結構架構
Facade的幾個要點spa
從客戶程序的角度來看,Facade模式不只簡化了整個組件系統的接口,同時對於組件內部與外部客戶程序來講,從某種程度上也達到了一種「解耦」的效果——內部子系統的任何變化不會影響到Façade接口的變化。 架構設計
Façade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。Façade不少時候更是一種架構設計模式。 設計
Façade設計模式並不是一個集裝箱,能夠任意地放進任何多個對象。Façade模式中組件的內部應該是「相互耦合關係比較大的一系列組件」,而不是一個簡單的功能集合。 code
注意區分Façade模式、Adapter模式、Bridge模式與Decorator模式。Façade模式注重簡化接口,Adapter模式注重轉換接口,Bridge模式注重分離接口(抽象)與其實現,Decorator模式注重穩定接口的前提下爲對象擴展功能。orm
適用性對象
1.爲一個複雜子系統提供一個簡單接口。接口
2.提升子系統的獨立性。
3.在層次化結構中,能夠使用Facade模式定義系統中每一層的入口。
Facade模式的模型
A系統有A1, A2, A3等類。客戶端須要調用A系統的的A1.doSomething1();A2.doSomething2();A3.doSomething3()來完成某功能。
Facade模式的實現模型就是:
A系統:
class A1 { public void doSomething1(); }
class A2 { public void doSomething2(); }
class A3 { public void doSomething3(); }
Facade:
public class Facade { public void doSomething() { A1 a1 = new A1(); A1 a2 = new A2(); A1 a3 = new A3(); a1.doSomething1(); a2.doSomething2(); a3.doSomething3(); } }
Test:
public class Client { public static void main(String []args) { Facade facade = new Facade(); facade.doSomething(); } }