您的位置:首页 > 其它

(结构型模式)Proxy——代理模式

2010-05-27 22:14 204 查看

一、意图

代理模式:为其他对象提供一种代理以控制对这个对象的访问

二、基本思想

代理模式实际就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

三、优缺点分析

GOOD:(适用场合) 远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象在不同地址空间的事实。 例如:客户端程序调用代理就可以解决远程访问的问题 虚拟代理:是根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象,从而达到性能的最优化(例如浏览器使用代理模式来优化下载)。 例如:打开大网页时,未马上打开的图片就是通过虚拟代理来替代了真实的图片,而代理存储了真实图片的路径和尺寸。 安全代理:用来控制真实对象的访问权限 智能引用:当调用真实对象时,代理处理另外一些事 四、标准UML图





五、标准源码

[code] #ifndef PROXY_H
#define PROXY_H
// 定义了Proxy和RealSubject的公有接口,
// 这样就可以在任何需要使用到RealSubject的地方都使用Proxy.
class Subject
{
public:
 Subject(){}
 virtual ~Subject(){}
 virtual void Request() = 0;
};
// 真正使用的实体
class RealSubject
 : public Subject
{
public:
 RealSubject();
 virtual ~RealSubject(){}
 virtual void Request();
};
// 代理类,含有一个指向RealSubject对象的指针
class Proxy
 : public Subject
{
public:
 Proxy();
 virtual ~Proxy();
 virtual void Request();
private:
 RealSubject* m_pRealSubject;
};
#endif
[/code]

[code] #include "Proxy.h"
#include <iostream>
RealSubject::RealSubject()
{
 std::cout << "Constructing a RealSubject\n";
}
void RealSubject::Request()
{
 std::cout << "Request By RealSubject\n";
}
Proxy::Proxy()
 : m_pRealSubject(NULL)
{
 std::cout << "Constructing a Proxy\n";
}
Proxy::~Proxy()
{
 delete m_pRealSubject;
 m_pRealSubject = NULL;
}
void Proxy::Request()
{
 // 需要使用RealSubject的时候才去初始化
 if (NULL == m_pRealSubject)
{
 std::cout << "Request By Proxy\n";
 m_pRealSubject = new RealSubject();
}
 m_pRealSubject->Request();
}
[/code]

[code] #include "Proxy.h"
#include <stdlib.h>
int main()
{
 Subject* pProxy = new Proxy();
 pProxy->Request();
 delete pProxy;
 system("pause");
 return 0;
}
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: