一、概述
Facade(外觀)模式為子系統中的各類(或結構與方法)提供一個簡明一致的界面,隱藏子系統的複雜性,使子系統更加容易使用。
實際套用中,我們在對付一些老舊的code(尤其是將C的代碼轉成C++代碼)或者即便不是老舊code,但涉及多個子系統時,除了重寫全部代碼(對於老舊code而言),我們還可能採用這樣一種策略:
重新進行類的設計,將原來分散在源碼中的類/結構及方法重新組合,形成新的、統一的接口,供上層套用使用。
這在某種意義上與Adapter及Proxy有類似之處,但是,Proxy(代理)注重在為Client-Subject提供一個訪問的中間層,如CORBA可為應用程式提供透明訪問支持,使應用程式無需去考慮平台及網路造成的差異及其它諸多技術細節;Adapter(適配器)注重對接口的轉換與調整;而Facade所面對的往往是多個類或其它程式單元,通過重新組合各類及程式單元,對外提供統一的接口/界面。
三、套用
在遇到以下情況使用Facade模式:
1、當你要為一個複雜子系統提供一個簡單接口時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時都會產生更多更小的類。這使得子系統更具可重用性,也更容易對子系統進行定製,但這也給那些不需要定製子系統的用戶帶來一些使用上的困難。
Facade可以提供一個簡單的預設視圖,這一視圖對大多數用戶來說已經足夠,而那些需要更多的可定製性的用戶可以越過Facade層。
2、客戶程式與抽象類的實現部分之間存在著很大的依賴性。引入Facade將這個子系統與客戶以及其他的子系統分離,可以提高子系統的獨立性和可移植性。
3、當你需要構建一個層次結構的子系統時,使用Facade模式定義子系統中每層的入口點,如果子系統之間是相互依賴的,你可以讓它們僅通過Facade進行通訊,從而簡化了它們之間的依賴關係。
四、優缺點
Facade模式有下面一些優點:
1、它對客戶禁止子系統組件,因而減少了客戶處理的對象的數目並使得子系統使用起來更加方便。
2、它實現了子系統與客戶之間的松耦合關係,而子系統內部的功能組件往往是緊耦合的。
松耦合關係使得子系統的組件變化不會影響到它的客戶。Facade模式有助於建立層次結構系統,也有助於對對象之間的依賴關係分層。Facade模式可以消除複雜的循環依賴關係。這一點在客戶程式與子系統是分別實現的時候尤為重要。
在大型軟體系統中降低編譯依賴性至關重要。在子系統類改變時,希望儘量減少重編譯工作以節省時間。用Facade可以降低編譯依賴性,限制重要系統中較小的變化所需的重編譯工作。Facade模式同樣也有利於簡化系統在不同平台之間的移植過程,因為編譯一個子系統一般不需要編譯所有其他的子系統。
3、如果套用需要,它並不限制它們使用子系統類。因此你可以在系統易用性和通用性之間加以選擇。
相關詞條
-
facade
Facade(外觀)模式為子系統中的各類(或結構與方法)提供一個簡明一致的界面,隱藏子系統的複雜性,使子系統更加容易使用。
概述 圖表 模式套用 優缺點 -
Facade模式
Facade(外觀)模式為子系統中的各類(或結構與方法)提供一個簡明一致的界面,隱藏子系統的複雜性,使子系統更加容易使用。它是為子系統中的一組接口所提供...
-
設計模式
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被...
簡介 設計框架 設計原則 基本模式 設計步驟 -
設計模式[設計模式概念]
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、代碼設計經驗的總結。 使用設計模式的目的:為了代碼可重用性、讓代碼更...
簡介 設計框架 設計原則 基本模式 設計步驟 -
設計模式與遊戲完美開發
《設計模式與遊戲完美開發》是於2017年1月清華大學出版社出版的一本圖書,作者是蔡升達
前言 圖書簡介 目錄 -
門面模式
門面模式,是指提供一個統一的接口去訪問多個子系統的多個不同的接口,它為子系統中的一組接口提供一個統一的高層接口。使得子系統更容易使用。
定義 模式實現形式 使用模式情況 門面模式優劣 門面模式缺點 -
圖解設計模式
《圖解設計模式》是一部由[日] 結城浩所著書籍,人民郵電出版社出版發行。
出版信息 內容簡介 結城浩 目錄 叢書信息 -
模式
一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。命名一個新的模式增加了我們的設計辭彙。設計模式允許我們在較高的抽象層次上進行設計。基於一個模式...
設計模式 軟體 資料庫系統結構