代理模式----C++实现

代理模式

定义:

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

适用性:

在需要比较通用和复杂的对象指针代替简单的指针的时候,需要使用代理模式。以下是几种常见的情况:

1、  远程代理,为一个对象在不同的地址空间提供局部代表。

2、  虚代理,根据需要创建开销很大的对象。

3、  保护代理,控制对原对象的访问。

4、  智能指引,取代简单的指针,在访问对象时执行一些附加操作。

 

结构:


实现:

class Subject

{

public:

       virtual void Request() {};

       virtual~Subject(){}

};

//真实角色类

class RealSubject:public Subject

{

public:

       voidRequest()

       {

              cout<<"RealSubject Request"<<endl;

       }

};

//代理类

class Proxy:public Subject

{

public:

       Proxy(Subject *pobject):m_pSubject(pobject)

       { }

 

       voidRequest()

       {

              before();

              m_pSubject->Request();

              after();

       }

protected:

//在调用真实角色之前的一些控制操作

       voidbefore()

       {

              cout<<"before Proxy call RealSubject Request"<<endl;

       }

//在调用真实角色之后的一些控制操作

       voidafter()

       {

              cout<<"after Proxy call RealSubject Request"<<endl;

       }

private:

       Subject  *m_pSubject;

};

       Subject *pobject = new RealSubject;

       Proxy *px = newProxy(pobject);

       px->Request();

 

扩展:

普通代理,有时候用户不能直接访问真实角色,只能访问代理。就是我们不能直接new一个RealSubject对象,然后传给代理。这时候我们需要改代理,让代理自动生成一个真实角色对象。

class Proxy:public Subject

{

public:

       Proxy()

       { 

              m_pSubject = new RealSubject;

       }

 

       voidRequest()

       {

              before();

              m_pSubject->Request();

              after();

       }

protected:

       voidbefore()

       {

              cout<<"before Proxy call RealSubject Request"<<endl;

       }

 

       voidafter()

       {

              cout<<"after Proxy call RealSubject Request"<<endl;

       }

private:

       Subject  *m_pSubject;

};

相关模式比较:

1、  适配器模式,适配器模式为它所适配的对象提供了一个不同的接口。而代理提供的接口与它的实体的接口相同

2、  装饰模式:代理模式与装饰模式的实现类似。但装饰模式的目的是为对象添加功能,而代理则控制对对象的访问。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值