赞
踩
代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一个代理或占位符,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。
代理模式组成部分:
(1)目标对象(Real Subject):代理对象所代表的真实对象,是最终要引用的对象。
(2)代理对象(Proxy):持有目标对象的引用,控制对目标对象的访问,并可能提供额外的功能。
(3)客户端(Client):使用代理对象来访问目标对象,通常不会直接访问目标对象。
代理模式的分类:
(1)远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理对象,这个对象作为该远程对象的代表,以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理(Virtual Proxy):根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象的引用,真实对象只在需要时才会被真正创建。
(3)保护代理(Protect Proxy):控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的情况。
(4)智能引用代理(Smart Reference Proxy):取代了简单的指针,它在访问对象时执行一些附加操作,比如将每一次的访问计数。
- #include<iostream>
- using namespace std;
-
- // 抽象角色
- class subject
- {
- public:
- virtual void Request() = 0 {}
- };
-
- // 真实角色
- class Consubject:public subject
- {
- public:
- void Request(); //实现了在抽象角色中定义的方法
- };
-
- void Consubject::Request() //重载
- {
- cout << "ConRequest" << endl;
- }
-
- // 代理角色
- class Proxy
- {
- public:
- Proxy() {}
- Proxy(subject* sub)
- {
- m_sub = sub; //代理角色中定义了一个真实角色对象
- }
- ~Proxy()
- {
- delete m_sub;
- }
- void Request() //代理角色也实现了抽象角色的方法
- {
- cout << "Proxy REQ" << endl;
- m_sub->Request(); //代理角色调用真实角色的业务方法
- }
- private:
- subject* m_sub;
- };
-
- void main()
- {
- subject* sub = new Consubject(); //真实角色对象
- Proxy* p = new Proxy(sub); //定义代理对象
- p->Request();
- }
结果:
- Proxy REQ
- ConRequest
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。