C++設計模式編程中Facade外觀模式的使用實例解析
外觀模式提供了一個統(tǒng)一的接口,用來訪問子系統(tǒng)的一群接口。外觀定義了一個高層接口,讓子系統(tǒng)更容易使用。外觀模式讓接口變得簡單,簡化了子系統(tǒng)的接口。外觀模式十分簡單,簡而言之,就是簡化你的類的接口,將一系列的復雜的過程封裝到內(nèi)部,對外只提供最簡單的接口。
結(jié)構(gòu)圖:
適用場景:
當你要為一個復雜子系統(tǒng)提供一個簡單接口時。子系統(tǒng)往往因為不斷演化而變得越來越復雜。大多數(shù)模式使用時都會產(chǎn)生更多更小的類。這使得子系統(tǒng)更具可重用性,也更容易對子系統(tǒng)進行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難。Facade可以提供一個簡單的缺省視圖,這一視圖對大多數(shù)用戶來說已經(jīng)足夠,而那些需要更多的可定制性的用戶可以越過Facade層。
客戶程序與抽象類的實現(xiàn)部分之間存在著很大的依賴性。引入Facade將這個子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨立性和可移植性。
當你需要構(gòu)建一個層次結(jié)構(gòu)的子系統(tǒng)時,使用Facade模式定義子系統(tǒng)中每層的入口點。如果子系統(tǒng)之間是相互依賴的,你可以讓它們僅通過Facade進行通訊,從而簡化了它們之間的依賴關系。
實現(xiàn):
代碼片斷 1:Facade.h
//Facade.h #ifndef _FACADE_H_ #define _FACADE_H_ class Subsystem1{ public: Subsystem1(); ~Subsystem1(); void Operation(); protected: private: }; class Subsystem2{ public: Subsystem2(); ~Subsystem2(); void Operation(); protected: private: }; class Facade{ public: Facade(); ~Facade(); void OperationWrapper(); protected: private: Subsystem1* _subs1; Subsystem2* _subs2; }; #endif //~_FACADE_H_
代碼片斷 2:Facade.cpp
//Facade.cpp #include "Facade.h" #include <iostream> using namespace std; Subsystem1::Subsystem1(){ } Subsystem1::~Subsystem1(){ } void Subsystem1::Operation(){ cout<<"Subsystem2 operation.."<<endl; } Subsystem2::Subsystem2(){ } Subsystem2::~Subsystem2(){ } void Subsystem2::Operation(){ cout<<"Subsystem2 operation.."<<endl; } Facade::Facade(){ this->_subs1 = new Subsystem1(); this->_subs2 = new Subsystem2(); } Facade::~Facade(){ delete _subs1; delete _subs2; } void Facade::OperationWrapper(){ this->_subs1->Operation(); this->_subs2->Operation(); }
代碼片斷 3:main.cpp
//main.cpp #include "Facade.h" #include <iostream> using namespace std; int main(int argc,char* argv[]){ Facade* f = new Facade(); f->OperationWrapper(); return 0; }
再來看一個例子:
相關文章
Java?C++?算法題解拓展leetcode670最大交換示例
這篇文章主要介紹了Java?C++算法題解拓展leetcode670最大交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09VC++實現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法
這篇文章主要介紹了VC++實現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法,需要的朋友可以參考下2014-07-07