代理模式为其他对象提供一种代理以控制对这个对象的访问。其极简实现版本与装饰器模式很像,要注意区分。代理模式注重对目标类的访问控制,如果把控制认为是一种装饰,那么装饰的范畴相对更大一些。
以下代码定义了对象的抽象类。
#include <iostream>
using namespace std;
class Subject
{
public:
virtual ~Subject(){}
virtual void Request()=0;
};
以下代码定义了用户真正要访问的对象类。
class TargetSubject:public Subject
{
public:
void Request()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
以下代码定义了代理类。
class Proxy:public Subject
{
private:
Subject* Target;
public:
Proxy(Subject* target):Target(target){}
void Request()
{
Target->Request();
}
};
以下代码使用代理类对目标类对象进行了访问。
int main(void){
Subject* target = new TargetSubject();
Subject* proxy = new Proxy(target);
proxy->Request();
delete proxy;
delete target;
return 0;
}
输出
virtual void TargetSubject::Request()
网友评论