代理模式

来源:互联网 发布:windows声音设置 编辑:程序博客网 时间:2024/06/15 08:14

1、概念:也叫Proxy,它可以为其他对象提供一种代理以控制这个对象的访问。所谓代理,是指具有代理元(被代理的对象)具有相同接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。

2、类图角色和职责:




       (1)、subject(抽象主题角色):真实主题与代理主题的接口

       (2)、RealSubject(真是主题角色):定义了代理角色所代表的真实对象。

       (3)、Proxy(代理主题角色):含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真实主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。

 

3、试用范围:为其他对象提供一种一种代理以控制这个对象的访问(提示:a中包含b类;a,b类实现协议类)

4、示例代码:

      

#include<iostream>using namespace std;class Subject{public:virtual void salebook() = 0;};class  ReadlSubject:public Subject{public:virtual void salebook(){cout << "买书" << endl;}private:};// a中包含b类;a,b类实现协议类class dangdangProxy:public Subject{public:dangdangProxy(ReadlSubject *s){m_realSubject = s;}dangdangProxy(){}~dangdangProxy(){if (NULL!= m_realSubject){delete m_realSubject;m_realSubject = NULL;}}virtual void salebook(){m_realSubject = new ReadlSubject;dazhe();m_realSubject->salebook();dazhe();}void dazhe(){cout << "双十一打折" << endl;}private:ReadlSubject *m_realSubject;};int main(void){Subject *s = new dangdangProxy(new ReadlSubject);s->salebook();delete s;return 0;}




 

原创粉丝点击