外觀模式(Facade Pattern)也叫門面模式,是一種比較常用也是非常簡單的設計模式。 定義: 要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。外觀模式提供一個高層次的介面,使得子系統更易使用。 外觀模式具有以下兩個角色。 外觀(Facade)角色:客戶端可以調用該角色的方法,該 ...
外觀模式(Facade Pattern)也叫門面模式,是一種比較常用也是非常簡單的設計模式。
定義:
- 要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。外觀模式提供一個高層次的介面,使得子系統更易使用。
外觀模式具有以下兩個角色。
- 外觀(Facade)角色:客戶端可以調用該角色的方法,該角色知曉相關子系統的功能和責任。正常情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統,即該角色沒有實際的業務邏輯,只是一個委托類。
- 子系統(Subsystem)角色:可以同時有一個或多個子系統,每一個子系統都不是一個單獨的類,而是一個類的集合。子系統不知道外觀角色的存在,對於子系統而言,外觀角色僅僅是一個客戶端而已。
類圖如下所示。
由於子系統是一個類的集合,此處使用3個無關的類進行代表。
子系統類的集合
public class ClassA() { public void methodA() { } } public class ClassB() { public void methodB() { } } public class ClassC() { public void methodC() { } }
Facade.java
public class Facade { // 被委托的對象 private ClassA a = new ClassA(); private ClassB b = new ClassB(); private ClassC c = new ClassC(); // 提供外界的方法 public void methodA() { a.methodA(); } public void methodB() { b.methodB(); } public void methodC() { c.methodC(); } }
優點:
- 減少系統的相互依賴,所有的對象都是對Facade對象的依賴,與子系統無關。
- 提高靈活性,不管子系統內部如何變化,只要不影響Facade對象,任何活動都是自由的。
- 提高安全性,Facade中未提供的方法,外界就無法訪問,提高系統的安全性。
缺點:
- 不符合開閉原則,對修改關閉,對擴展開放。
應用場景:
- 為一個複雜的模塊或子系統提供一個供外界訪問的介面。
- 子系統相對獨立,外界對子系統的訪問只要黑箱操作即可,
- 預防風險擴散,使用Facade進行訪問控制。
摘自:
青島東合信息技術有限公司 . 設計模式(Java版) . 電子工業出版社,2012,98-100.