目錄
一、爲什麼要使用外觀模式
二、模式定義
三、模式結構
四、模式優點
五、模式缺點
六、使用環境
一、爲什麼要使用外觀模式
網站上有各個不同的板塊,但是都通過網站首頁進入,首頁是一個外觀對象,通過它進入各個模塊。
進遊樂場玩耍,需要先從大門進入,大門是一個外觀對象,然後通過大門指引前往某項目。
引入外觀角色之後,用戶只需要直接與外觀角色交互,用戶與子系統之間的複雜關係由外觀角色來實現,從而降低了系統的耦合度
二、模式定義
外觀模式(Facade Pattern):外部與一個子系統的通信必須通過一個統一的外觀對象進行,爲子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。外觀模式又稱爲門面模式,它是一種對象結構型模式。
三、模式結構
外觀模式包含如下角色:
• Facade: 外觀角色
• SubSystem:子系統角色
體現單一職責原則:引入一個外觀對象,它爲子系統的訪問提供了一個簡單而單一的入口。
體現迪米特法則:通過引入一個新的外類可以降低原有系統的複雜度,同時降低客戶類與子系統類耦合度
四、模式優點
• 對客戶屏蔽子系統組件,減少了客戶處理的對象數目並使得子系統使用起來更加容易。通過引入外觀模式,客戶代碼將變得很簡單,與之關聯的對象也很少。
• 實現了子系統與客戶之間的松耦合關係,這使得子系統的組件變化不會影響到調用它的客戶類,只需要調整外觀類即可。
• 降低了大型軟件系統中的編譯依賴性,並簡化了系統在不同平臺之間的移植過程,因爲編譯一個子系統一般不需要編譯所有其他的子系統。一個子系統的修改對其他子系統沒有任何影響,而且子系統內部變化也不會影響到外觀對象。
• 只是提供了一個訪問子系統的統一入口,並不影響用戶直接使用子系統類
五、模式缺點
• 不能很好地限制客戶使用子系統類,如果對客戶訪問子系統類做太多的限制則減少了可變性和靈活性。
• 在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。
六、使用環境
在以下情況下可以使用外觀模式:
• 當要爲一個複雜子系統提供一個簡單接口時可以使用外觀模式。該接口可以滿足大多數用戶的需求,而且用戶也可以越過外觀類直接訪問子系統。
• 客戶程序與多個子系統之間存在很大的依賴性。引入外觀類將子系統與客戶以及其他子系統解耦,可以提高子系統的獨立性和可移植性。
• 在層次化結構中,可以使用外觀模式定義系統中每一層的入口,層與層之間不直接產生聯繫,而通過外觀類建立聯繫,降低層
之間的耦合度