C++設(shè)計(jì)模式編程中Facade外觀模式的使用實(shí)例解析
外觀模式提供了一個(gè)統(tǒng)一的接口,用來訪問子系統(tǒng)的一群接口。外觀定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。外觀模式讓接口變得簡(jiǎn)單,簡(jiǎn)化了子系統(tǒng)的接口。外觀模式十分簡(jiǎn)單,簡(jiǎn)而言之,就是簡(jiǎn)化你的類的接口,將一系列的復(fù)雜的過程封裝到內(nèi)部,對(duì)外只提供最簡(jiǎn)單的接口。
結(jié)構(gòu)圖:

適用場(chǎng)景:
當(dāng)你要為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)單接口時(shí)。子系統(tǒng)往往因?yàn)椴粩嘌莼兊迷絹碓綇?fù)雜。大多數(shù)模式使用時(shí)都會(huì)產(chǎn)生更多更小的類。這使得子系統(tǒng)更具可重用性,也更容易對(duì)子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難。Facade可以提供一個(gè)簡(jiǎn)單的缺省視圖,這一視圖對(duì)大多數(shù)用戶來說已經(jīng)足夠,而那些需要更多的可定制性的用戶可以越過Facade層。
客戶程序與抽象類的實(shí)現(xiàn)部分之間存在著很大的依賴性。引入Facade將這個(gè)子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨(dú)立性和可移植性。
當(dāng)你需要構(gòu)建一個(gè)層次結(jié)構(gòu)的子系統(tǒng)時(shí),使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn)。如果子系統(tǒng)之間是相互依賴的,你可以讓它們僅通過Facade進(jìn)行通訊,從而簡(jiǎn)化了它們之間的依賴關(guān)系。
實(shí)現(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;
}
再來看一個(gè)例子:
相關(guān)文章
Java?C++?算法題解拓展leetcode670最大交換示例
這篇文章主要介紹了Java?C++算法題解拓展leetcode670最大交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動(dòng)畫的方法
這篇文章主要介紹了VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動(dòng)畫的方法,需要的朋友可以參考下2014-07-07
C++?OpenCV技術(shù)實(shí)戰(zhàn)之身份證離線識(shí)別
OpenCV身份證離線識(shí)別技術(shù)的主要技術(shù)就是通過OpenCV找到身份證號(hào)碼區(qū)域,然后通過OCR進(jìn)行數(shù)字識(shí)別該區(qū)域的截圖即可得到身份證號(hào)碼。感興趣的可以了解一下2021-12-12
QT基于TCP實(shí)現(xiàn)網(wǎng)絡(luò)聊天室程序
這篇文章主要為大家詳細(xì)介紹了QT基于TCP實(shí)現(xiàn)網(wǎng)絡(luò)聊天室程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

