在講解模式之前,先來舉個生活中的例子吧:為了方便,乙個電源總開關控制四盞燈,乙個風扇,一台空調和一台電視機的啟動與關閉。假設沒有這個總開關,可想而知,啟動一次或者關閉一次這些裝置,需要重複多次相同的工作。適當引入電源總開關同時控制所有裝置,極大的提高了效率,這就是外觀模式的縮影。這篇部落格具體講解了外觀模式,對模式動機,使用場景,優缺點,uml類圖等進行了分析,以及c++**實現。
外觀模式(
facade
)是指外部與子系統的通訊必須通過乙個統一的外觀物件進行,為子系統中的一組介面提供乙個一致的介面,定義乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式,完美的體現了迪公尺特法則,引入外觀模式後,使用者只需直接與外觀角色互動,使用者與子系統之間的複雜關係由外觀角色來實現,從而降低了系統的耦合度。提高了客戶端使用的便捷性,使得客戶端無須關係子系統的工作細節,通過外觀即可呼叫相關功能。下面我們以乙個系統需求入手來進行分析:
某軟體公司為新開發的智慧型手機控制與管理軟體提供了一鍵備份功能,通過該功能可以將原本儲存在手機中的通訊錄、簡訊、**、歌曲等資料一次性全部拷貝到移動儲存介質(例如mmc卡或sd卡)中。在實現過程中需要與多個已有的類進行互動,例如通訊錄管理類、簡訊管理類等,為了降低系統的耦合度,試使用合適的設計模式來設計並程式設計模擬實現該一鍵備份功能。
在這個需求題目中,同時將資料拷貝到不同的儲存裝置中,這裡我們就定義三種備份資料(簡訊,**,歌曲)來進行設計,下面是uml類圖:
其中,外觀類與三個具體的備份類是組合關係,具有一定uml基礎的朋友們一眼就可看懂原理,融入到自己程式設計中。
下面是c++**的實現:
copymessage.h:
#pragma
#includeusing namespace std;
class copymessage
;copymessage.cpp:
#include "copymessage.h"
copymessage::copymessage()
copymessage::~copymessage()
void copymessage::copy()
copymusic.h:
#pragma once
#includeusing namespace std;
class copymusic
;copymusic.cpp:
#include "copymusic.h"
copymusic::copymusic()
copymusic::~copymusic()
void copymusic::copy()
copypicture.h:
#pragma once
#includeusing namespace std;
class copypicture
;copypicture.cpp:
#include "copypicture.h"
copypicture::copypicture()
copypicture::~copypicture()
void copypicture::copy()
facade.h:
#pragma once
#include "copymessage.h"
#include "copymusic.h"
#include "copypicture.h"
class facade
;facade.cpp:
#include "facade.h"
facade::facade()
facade::~facade()
void facade::copy()
main.cpp:
#include#include "facade.h"
using namespace std;
int main()
最後我們來說一下外觀模式的優缺點吧。它的優點有很明顯,對客戶遮蔽了子系統元件,客戶**變得簡單,與之關聯的物件減少;子系統和客戶端之間松耦合,子系統的變化不會影響到客戶端使用它;降低了大型系統的編譯依賴性等等。然而缺點也是不可避免的,它不能很好的限制客戶使用子系統,如果對子系統限制太多則減少了可變性和靈活性;在不引入抽象類的情況下,增加子系統會違背開閉原則等等。 C 外觀模式
外觀模式 facade pattern 又稱為門面模式,屬於結構型模式。fa ade 為子系統中的一組介面提供了乙個統一的高層介面,該介面使得子系統更加容易使用。uml 結構圖 子系統 subsystem 可以同時有乙個或者多個子系統,子系統可以是乙個單獨的類或類的集合。每個子系統都可以被 clie...
C 設計模式 外觀模式
目錄 基本概念 與例項 外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。增加外觀facade可以提供乙個簡單的介面,減少它們之間的依賴 為新系統開發乙個外觀facade類,來提供設計粗糙或高度複雜的遺留 的比較清晰簡單的介...
C 設計模式 外觀模式
為子系統中的一組介面提供乙個一致的介面 facade 外觀角色,是在客戶端直接呼叫的角色,在外觀角色中可以知道相關的 乙個或者多個 子系統的功能和責任,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統物件處理 subsystem 子系統角色,每乙個子系統可以不是乙個單獨的類,而是乙...