设计模式(十):代理模式
定义:
·为其他对象提供一种代理以控制对这个对象的访问。实际上是在访问对象时引入一定程度的间接性
·创建具有现有对象的对象,以便向外界提供功能接口。
主要解决:
·在直接访问对象时带来的问题
如何解决:
·增加中间件
以代码为例:
关系类图如下
一、定义Subject类
Subject为Real Subject和Proxy的公共接口,以便可以在期望Real Subject的任何地方使用Proxy调用。
#include <iostream>
class Subject
{
public:
virtual ~Subject() { /* ... */ }
virtual void request() = 0;
// ...
};
二、定义RealSubject类实现Subject类接口
定义Proxy代理的真正的RealSubject类
class RealSubject : public Subject
{
public:
void request()
{
std::cout << "Real Subject request" << std::endl;
}
// ...
};
三、定义Proxy类
包含一个让Proxy类代理访问RealSubject类的引用
class Proxy : public Subject
{
public:
Proxy()
{
subject = new RealSubject();//实例化一个Realsubject类
}
~Proxy()
{
delete subject;
}
void request()
{
subject->request();
}
// ...
private:
RealSubject *subject;
};
四、main函数调用
int main()
{
Proxy *proxy = new Proxy();
proxy->request();
delete proxy;
return 0;
}
运行结果:
Real Subject request
这样就实现了一个简单的代理模式。
代理模式的优缺点
优点:
1、职责清晰。
2、高扩展性。
3、智能化。
缺点:
1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
注意事项:
·代理模式包装另一个对象,并控制对它的访问
·装饰者模式包装另一个对象,并提供额外的行为
·外观模式包装许多对象以简化它们的接口
·适配器模式包装另一个对象,并提供不同的接口