代理模式 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 对其定义是:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值