設計模式(10) 外觀模式(FACADE)

問題聚焦:
    設計一個系統時,比較常見的作法是將它劃分爲若干個小的系統,互相協做,組成一個大的系統。
    那麼,在設計這些小系統時,須要注意一些什麼呢?
    外觀模式爲何能夠讓子系統更加容易的使用呢?(最小化子系統之間的通訊和相互依賴關係,即下降耦合度)
意圖:
    爲子系統中的一組接口提供一個一致的界面。Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
動機:
    將一個系統劃分爲若干個子系統有利於下降系統的複雜性。
    一個常見的設計目標是使子系統間的通訊和相互依賴關係達到最小。
    達到該目標的途徑之一就是引入一個外觀對象,它爲子系統中較通常的設施提供了一個單一而簡單的界面。
    其思想以下圖所示:
     Demo:以編譯器子系統的設計爲例,說明外觀模式的思想:
     子系統類劃分:Scanner, Parser, ProgramNode, BytecodeStream, ProgramNodeBuilder
     要求:對普通用戶提供一個高層的,單一而簡單的編譯子系統接口
              對高級專業的用戶提供底層功能,能夠直接訪問具體的子系統類。
     設計:
   
     Compiler類(關鍵),其職責爲兩點:    
    1)爲用戶屏蔽子系統,提供一個高層的簡單的使用接口;
    2)不徹底隱藏實現編譯功能的那些子系統類,使得少數懂的如何使用底層功能的人能夠調用這些功能。

適用性:
在遇到如下狀況使用Facade模式:
  • 爲一個複雜子系統提供一個簡單接口。
  • 客戶程序與抽象類的實現部分之間存在很大的依賴性。
  • 當你須要構件一個層次結構的子系統時,使用facade模式定義子系統中每層的入口點。若是子系統之間是相互依賴的,能夠讓它們僅經過facade進行通信,從而簡化了它們之間的依賴關係。

結構:ui

 

    
相關文章
相關標籤/搜索