代理模式
Provide a surrogate or placeholder for anther object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。)
UML类图
C++代码实现
#include <iostream>
using namespace std;
class Subject {
public:
virtual void Request() = 0;
};
class ConcreteSubject : public Subject {
public:
void Request() { cout << "执行调用 ---> Request()" << endl; }
};
class Proxy {
public:
Proxy(Subject* pSub): _pSub(pSub) { }
void Request() { _pSub->Request(); }
private:
Subject* _pSub;
};
#include "Proxy.h"
int main()
{
Subject *pSubject = new ConcreteSubject();
Proxy* pProxy = new Proxy(pSubject);
pProxy->Request();
delete pProxy;
delete pSubject;
return 0;
}
Proxy 模式最大的好处就是实现了逻辑和实现的彻底解耦。
Proxy 模式的扩展:
普通代理:客户端只能访问代理角色,不能访问真实角色
强制代理:必须通过真实角色找到代理角色,否则不能访问
虚拟代理:在需要的时候才初始化主题对象
动态代理:AOP,参考Spring AOP。或者google JAVA实现动态代理