C++设计模式——代理模式
- 格式:pdf
- 大小:84.98 KB
- 文档页数:2
C++设计模式——代理模式
代理模式(Proxy),为其他对象提供⼀种代理以控制这个对象的访问
Subject:定义RealSubject和Proxy的共⽤接⼝,这样就可以在任何使⽤RealSubject的地⽅都可以使⽤Proxy。
class Subject //Subject 定义了RealSubject和Proxy的共⽤接⼝..这样就在任何使⽤RealSubject的地⽅都可以使⽤Proxy
{
public:
virtual void func()
{
cout << "Subject" << endl;
}
};
RealSubject:真实处理业务的⾓⾊。
class RealSubject :public Subject // RealSubject 定义proxy所代表的真实实体
{
public:
virtual void func()
{
cout << "RealSubject" << endl;
}
};
Proxy:保存⼀个引⽤使得代理可以访问实体。
class Proxy : public Subject //proxy 保存⼀个引⽤使得代理可以访问实体,并且提供⼀个于Subject的接⼝相同的接⼝ 这样代理就可以⽤来替代实体
{
RealSubject real;
public:
virtual void func()
{
cout << "Proxy" << endl;
real.func();
}
};
提供⼀个与Subject的接⼝相同的接⼝,这样代理就可以⽤来代替实体。
代码:
#include
using namespace std;
class Subject //Subject 定义了RealSubject和Proxy的共⽤接⼝..这样就在任何使⽤RealSubject的地⽅都可以使⽤Proxy
{
public:
virtual void func()
{
cout << "Subject" << endl;
}
};
class RealSubject :public Subject // RealSubject 定义proxy所代表的真实实体
{
public:
virtual void func()
{
cout << "RealSubject" << endl;
}
};
class Proxy : public Subject //proxy 保存⼀个引⽤使得代理可以访问实体,并且提供⼀个于Subject的接⼝相同的接⼝ 这样代理就可以⽤来替代实体
{
RealSubject real;
public:
virtual void func()
{
cout << "Proxy" << endl;
real.func();
}
};int main()
{
Proxy proxy;
proxy.func();
return 0;
}
—— 参考⼤话设计模式
代理模式应⽤:
根据⽬的和实现⽅式的不同,代理模式可分为很多种,常见的有:
远程代理(Remote Proxy)
为⼀个位于不同地址空间的对象提供⼀个本地代理,对代理的⽅法调⽤会导致对远程对象的⽅法调⽤。ATM 就是⼀个例⼦,ATM 可能会持
有(存在于远程服务器中的)银⾏信息的⼀个代理对象。
虚拟代理(Virtual Proxy)
使⽤虚拟代理,代理可以作为⼀个(资源消耗较⼤的)对象的代表。虚拟代理经常延迟对象的创建,直到需要为⽌。在创建对象之前(及创
建对象过程中),虚拟代理也可以作为对象的代理;之后,代理将请求直接委托给 RealSubject。
保护代理(Protection Proxy)
根据访问权限,可以使⽤保护代理来控制对资源的访问。例如,有⼀个员⼯对象,保护代理可以允许普通员⼯调⽤对象的某些⽅法,管理员
调⽤其他⽅法。
缓冲代理(Cache Proxy)
为某⼀个⽬标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
智能引⽤代理(Smart Reference Proxy)
当⼀个对象被引⽤时,提供⼀些额外的操作(例如:将对象被调⽤的次数记录下来)。
优缺点
优点:
职责清晰:真实⾓⾊就是实现实际的业务逻辑,不关⼼其他⾮本职责的事务,通过后期的代理完成⼀件事务,附带的结果就是编程简介清
晰。
⾼扩展性:具体主题⾓⾊可变。
缺点:
这种模式引⼊了另⼀个抽象层,这有时可能是⼀个问题。如果真实主题被某些客户端直接访问,并且其中⼀些客户端可能访问代理类,这可
能会导致不同的⾏为。
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
实现代理模式需要额外的⼯作,有些代理模式的实现⾮常复杂