欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例

 更新時(shí)間:2016年03月09日 11:40:35   投稿:goldensun  
這篇文章主要介紹了C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例解析,代理模式可以被歸類為結(jié)構(gòu)型的設(shè)計(jì)模式,代理模式主張為對象提供一種代理以控制對這個(gè)對象的訪問,需要的朋友可以參考下

代理模式典型的結(jié)構(gòu)圖為:

201639114315740.jpg (558×217)

實(shí)際上,代理模式的想法非常簡單。

代理模式的實(shí)現(xiàn):

完整代碼示例(code):代理模式的實(shí)現(xiàn)很簡單,這里為了方便初學(xué)者的學(xué)習(xí)和參考,將給出完整的實(shí)現(xiàn)代碼(所有代碼采用 C++實(shí)現(xiàn),并在 VC 6.0 下測試運(yùn)行)。

代碼片斷 1:Proxy.h

//Proxy.h
#ifndef _PROXY_H_
#define _PROXY_H_
class Subject{
  public:
  virtual ~Subject();
  virtual void Request() = 0;
  protected:
  Subject();
  private:
};
class ConcreteSubject:public Subject{
  public:
  ConcreteSubject();
  ~ConcreteSubject();
  void Request();
  protected:
  private:
};
class Proxy{
  public:
  Proxy();
  Proxy(Subject* sub);
  ~Proxy();
  void Request();
  protected:
  private:
  Subject* _sub;
};
#endif //~_PROXY_H_

代碼片斷 2:Proxy.cpp

//Proxy.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
Subject::Subject(){
}
Subject::~Subject(){
}
ConcreteSubject::ConcreteSubject(){
}
ConcreteSubject::~ConcreteSubject(){
}
void ConcreteSubject::Request(){
  cout<<"ConcreteSubject......request
  ...."<<endl;
}
Proxy::Proxy(){
}
Proxy::Proxy(Subject* sub){
  _sub = sub;
}
Proxy::~Proxy(){
  delete _sub;
}
void Proxy::Request(){
  cout<<"Proxy request...."<<endl;
  _sub->Request();
}

代碼片斷 3:main.cpp

//main.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[]){
   Subject* sub = new ConcreteSubject();
  Proxy* p = new Proxy(sub);
  p->Request();
  return 0;
}

代碼說明:代理模式的實(shí)現(xiàn)很簡單,這里不做多余解釋??梢钥吹剑纠a運(yùn)行后,p 的 Request 請求實(shí)際上是交給了 sub 來實(shí)際執(zhí)行。

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

#include <iostream> 
#include <string> 
using namespace std; 
 
class Receiver 
{ 
private: 
  string name; 
 
public: 
  Receiver(string name):name(name) 
  { 
 
  } 
  string GetName() 
  { 
    return name; 
  } 
}; 
 
class Subject 
{ 
public: 
  virtual void display(){} 
}; 
 
class Sender:public Subject 
{ 
  Receiver *someone; 
public: 
  void SetReceiver(Receiver *someone) 
  { 
    this->someone = someone; 
  } 
  virtual void display() 
  { 
    cout<<"i hate you:" << someone->GetName()<<endl; 
  } 
}; 
 
class Proxy:public Subject 
{ 
public: 
  Subject *realobject; 
 
  void SetClient(Subject *client) 
  { 
    this->realobject = client; 
  } 
 
  void display() 
  { 
    realobject->display(); 
  } 
}; 
 
int main() 
{ 
  Receiver *recv = new Receiver("nobody"); 
  Sender *obj  = new Sender; 
  obj->SetReceiver(recv); 
  Proxy *proxy = new Proxy; 
  proxy->SetClient(obj); 
 
  proxy->display(); 
 
  system("pause"); 
  return 0; 
} 

由此可見,代理模式最大的好處就是實(shí)現(xiàn)了邏輯和實(shí)現(xiàn)的徹底解耦。

相關(guān)文章

  • C++讀寫(CSV,Yaml,二進(jìn)制)文件的方法詳解

    C++讀寫(CSV,Yaml,二進(jìn)制)文件的方法詳解

    為了處理文件,我們可以利用fstream庫。在這個(gè)庫里面有三種數(shù)據(jù)類型:ofstream,ifstream,fstream。本文將利用這個(gè)庫實(shí)現(xiàn)不同文件的讀寫操作,需要的可以參考一下
    2022-05-05
  • C++ Boost Intrusive庫示例精講

    C++ Boost Intrusive庫示例精講

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++實(shí)現(xiàn)LeetCode(21.混合插入有序鏈表)

    C++實(shí)現(xiàn)LeetCode(21.混合插入有序鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(21.混合插入有序鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言位圖算法詳解

    C語言位圖算法詳解

    這篇文章主要介紹了C語言實(shí)現(xiàn)的位圖算法,主要包括了位圖算法的定義與應(yīng)用,對于C程序算法設(shè)計(jì)的學(xué)習(xí)有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C++實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    C++實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 顯示內(nèi)存狀態(tài)示例分享

    顯示內(nèi)存狀態(tài)示例分享

    這篇文章主要介紹了顯示內(nèi)存狀態(tài)示例,代碼簡單,下面直接看代碼,需要的朋友可以參考下
    2014-02-02
  • VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟

    VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟

    本文主要介紹了VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • stl常用算法(Algorithms)介紹(stl排序算法、非變序型隊(duì)列)

    stl常用算法(Algorithms)介紹(stl排序算法、非變序型隊(duì)列)

    這篇文章主要介紹了stl常用算法(Algorithms)介紹(stl排序算法、非變序型隊(duì)列),需要的朋友可以參考下
    2014-05-05
  • Qt學(xué)習(xí)筆記之QPalette調(diào)色板類

    Qt學(xué)習(xí)筆記之QPalette調(diào)色板類

    這篇文章主要為大家詳細(xì)介紹了Qt學(xué)習(xí)筆記之QPalette調(diào)色板類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 詳解C語言之文件操作下)

    詳解C語言之文件操作下)

    這篇文章主要介紹了關(guān)于C語言文件操作方法的相關(guān)資料,小編覺得這篇文章寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11

最新評論