代理模式 C++ 实现

#include<iostream>
#include<string>
#include<cstdlib>

using namespace std;
/*
代理模式 :追女生问题(大话设计模式中的案例) 
*/

/*共同的接口*/
 
class givegift
{ public:
  virtual void givedolls() = 0;
  virtual void giveflowers() = 0;
  virtual void givechocolate() = 0;    
};

class schoolgirl 
{
  private:
        string name;
  public:
        void set_name(string name)
        {
          this->name = name;
        }
        
       string get_name()
        {
          return name;    
        }
};
 // 追求者 
class pursuit: public givegift
{
  schoolgirl mm;
  public:
        pursuit(schoolgirl mm)
        {
          this->mm = mm;
        }    
        
        void givedolls()
        {
          cout <<mm.get_name()<<"送你洋娃娃"<< endl;    
        }
        
        void giveflowers()
        {
          cout <<mm.get_name()<<"送你花儿"<< endl;    
        }
        
        void givechocolate()
        {
          cout <<mm.get_name()<<"送你巧克力"<< endl;    
        }
};
//代理 
class proxy: givegift
{
  pursuit *gg;
  public:
    proxy(schoolgirl *mm)
    {
      gg = new pursuit(*mm);         
    }    
    
    void givedolls()
    {
      gg->givedolls();    
    }
    
    void giveflowers()
    {
      gg->giveflowers();    
    }
    
    void givechocolate()
    {
      gg->givechocolate();    
    }
};
//相当于客户端 
int main()
{
  schoolgirl *jiaojiao = new schoolgirl();
  jiaojiao->set_name("李娇娇:");
  
  proxy *daili = new proxy(jiaojiao);
  
  daili->givedolls();
  daili->giveflowers();
  daili->givechocolate();
  system("pause");
    return 0;
}


 

 

总结:

这个模式就是用代理者将对代理者进行包装,并且继承共同的接口;其中GoF 对其定义是:

为其它对象提供一种代理以控制对这个对象的访问。

发布了53 篇原创文章 · 获赞 5 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章