代理模式实现起来比较简单。简单描述就是,隐藏真正实现的功能,而采用一个代理类来进行对隐藏部分的访问。客户只操作代理类。代理模式从一定程度上降低了系统的耦合性。
代理模式应用有集中情况
一,远程代理。为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
二,虚拟代理。根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
三,安全代理。用来控制真实对象访问时的权限。
四,智能指针。当调用真实的对象时,代理处理另外一些事。
代理模式实现步骤,首先,创建一个抽象类,用来提供真实对象以及代理类的接口。这样在任何使用真实对象的地方都可以使用代理类。然后,真实对象实现接口。最后代理类中保存一个引用用来访问实体对象。并提供一个与抽象类相同的接口。
代码如下:
#pragma once
#include <string>
class Subject
{
public:
Subject(){};
virtual void request() = 0;
};
class ConcreteSubject: public Subject
{
public:
ConcreteSubject(){};
virtual void request()
{
printf("requestA");
}
};
以上实现了抽象类以及实现类。
下面实现代理类。
#pragma once
#include "Subject.h"
class proxy : public Subject
{
public:
proxy(){};
virtual void request()
{
if(m_subj= NULL)
{
m_subj = new ConcreteSubject();
}
m_subj->request();
}
private:
Subject *m_subj;
};
然后像下面这样使用:
proxy *pro = new proxy();
pro->request();
return 0;
以上即为代理模式的简单实现。