“內容摘自《設計模式 可複用面向對象軟件的基礎》
類型
結構型模式
意圖
爲子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
適用性
當出現以下情況時可考慮使用該模式:
-
當你要爲一個複雜子系統提供一個簡單接口時。如果大部分用戶訪問的需求基本一致時,可以爲這些用戶提供一個缺省功能的Facade,讓大多數用戶經此訪問子系統;對於有特殊定製化訪問需求的用戶,可以越過Facade與子系統交互。 -
客戶程序與抽象類的實現部分之間存在着很大的依賴性。通過增設Facade,可以讓子系統與用戶之間的耦合降低,當需要修改或者移植的時候,只需要根據Facade提供的功能,就可以方便地進行調整。 -
當你需要構建一個層次結構的子系統時,使用Facade模式定義子系統中每層的入口點。如果子系統之間存在依賴,令其只通過Facade通信,可以簡化依賴關係。
參與者
-
Facade
知道哪些子系統類負責處理請求。
將客戶的請求代理給適當的子系統對象。 -
Subsystem classes
實現子系統的功能。
處理由Facade對象指派的任務。
沒有Facade的任何相關信息,即沒有指向Facade的指針。
優點
-
對客戶屏蔽子系統組件,減少了客戶處理的對象數目,使得子系統使用起來更方便。 -
實現了子系統與客戶之間的松耦合關係。 -
如果應用需要,它並不限制它們使用子系統類,故可以在系統易用性和通用性之間加以選擇。
應用
Facade模式比較經典的應用當屬Java中的Slf4j(Simple Log Facade for Java)了,想了解Facade模式,通過Slf4j可以有個清晰的認識。