雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C++設(shè)計(jì)模式編程中Facade外觀(guān)模式的使用實(shí)例解析

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

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

適用場(chǎng)景:
當(dāng)你要為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)單接口時(shí)。子系統(tǒng)往往因?yàn)椴粩嘌莼兊迷絹?lái)越復(fù)雜。大多數(shù)模式使用時(shí)都會(huì)產(chǎn)生更多更小的類(lèi)。這使得子系統(tǒng)更具可重用性,也更容易對(duì)子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶(hù)帶來(lái)一些使用上的困難。Facade可以提供一個(gè)簡(jiǎn)單的缺省視圖,這一視圖對(duì)大多數(shù)用戶(hù)來(lái)說(shuō)已經(jīng)足夠,而那些需要更多的可定制性的用戶(hù)可以越過(guò)Facade層。
客戶(hù)程序與抽象類(lèi)的實(shí)現(xiàn)部分之間存在著很大的依賴(lài)性。引入Facade將這個(gè)子系統(tǒng)與客戶(hù)以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨(dú)立性和可移植性。
當(dāng)你需要構(gòu)建一個(gè)層次結(jié)構(gòu)的子系統(tǒng)時(shí),使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn)。如果子系統(tǒng)之間是相互依賴(lài)的,你可以讓它們僅通過(guò)Facade進(jìn)行通訊,從而簡(jiǎn)化了它們之間的依賴(lài)關(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;
}

再來(lái)看一個(gè)例子:

上一篇:詳解state狀態(tài)模式及在C++設(shè)計(jì)模式編程中的使用實(shí)例

欄    目:C語(yǔ)言

下一篇:通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀(guān)模式

本文標(biāo)題:C++設(shè)計(jì)模式編程中Facade外觀(guān)模式的使用實(shí)例解析

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2460.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有