【設計模式】Java設計模式之外觀模式

目錄

一、爲什麼要使用外觀模式

二、模式定義

三、模式結構

四、模式優點

五、模式缺點

六、使用環境


一、爲什麼要使用外觀模式

網站上有各個不同的板塊,但是都通過網站首頁進入,首頁是一個外觀對象,通過它進入各個模塊。

進遊樂場玩耍,需要先從大門進入,大門是一個外觀對象,然後通過大門指引前往某項目。

引入外觀角色之後,用戶只需要直接與外觀角色交互,用戶與子系統之間的複雜關係由外觀角色來實現,從而降低了系統的耦合度

二、模式定義

外觀模式(Facade Pattern):外部與一個子系統的通信必須通過一個統一的外觀對象進行,爲子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。外觀模式又稱爲門面模式,它是一種對象結構型模式

三、模式結構

外觀模式包含如下角色:
Facade: 外觀角色
SubSystem:子系統角色
體現單一職責原則:引入一個外觀對象,爲子系統的訪問提供了一個簡單而單一的入口
體現迪米特法則:通過引入一個新的外類可以降低原有系統的複雜度,同時降低客戶類與子系統類耦合度

四、模式優點

對客戶屏蔽子系統組件減少了客戶處理的對象數目並使得子系統使用起來更加容易。通過引入外觀模式,客戶代碼將變得很簡單,與之關聯的對象也很少。
實現了子系統與客戶之間的松耦合關係,這使得子系統的組件變化不會影響到調用它的客戶類,只需要調整外觀類即可。
降低了大型軟件系統中的編譯依賴性,並簡化了系統在不同平臺之間的移植過程,因爲編譯一個子系統一般不需要編譯所有其他的子系統。一個子系統的修改對其他子系統沒有任何影響,而且子系統內部變化也不會影響到外觀對象。
只是提供了一個訪問子系統的統一入口,並不影響用戶直接使用子系統類

五、模式缺點

不能很好地限制客戶使用子系統類,如果對客戶訪問子系統類做太多的限制則減少了可變性和靈活性。
在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”

六、使用環境

在以下情況下可以使用外觀模式:
當要爲一個複雜子系統提供一個簡單接口時可以使用外觀模式。該接口可以滿足大多數用戶的需求,而且用戶也可以越過外觀類直接訪問子系統。
客戶程序與多個子系統之間存在很大的依賴性。引入外觀類將子系統與客戶以及其他子系統解耦,可以提高子系統的獨立性和可移植性。
在層次化結構中,可以使用外觀模式定義系統中每一層的入口,層與層之間不直接產生聯繫,而通過外觀類建立聯繫,降低層
之間的耦合度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章