设计模式-代理模式

代理模式Proxy):

    对其他对象提供一种代理以控制对这个对象的访问。

1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3.安全代理,用来控制真实对象访问时的权限。
4.智能指引,是指当调用真实的对象时,代理处理另外一些事。
接下来实现一下上面的UML对应的代码:
策略模式实现代码

#pragma once

#include <iostream>
using namespace std;

class CProxyInterface
{
public:
	virtual void DoFun1() = 0;
	virtual void DoFun2() = 0;
	virtual void DoFun3() = 0;
};

class CDoFunA : public CProxyInterface
{
public:
	void DoFun1()
	{
		cout<<"do fun1"<<endl;
	}
	void DoFun2()
	{
		cout<<"do fun2"<<endl;
	}
	void DoFun3()
	{
		cout<<"do fun3"<<endl;
	}
};

class CProxy : public CProxyInterface
{
private:
	CProxyInterface *m_pMyBody;
public:
	CProxy(CProxyInterface *pMyBody)
	{
		m_pMyBody = pMyBody;
	}
	~CProxy()
	{
		delete m_pMyBody;
	}
	void DoFun1()
	{
		m_pMyBody->DoFun1();
	}
	void DoFun2()
	{
		m_pMyBody->DoFun2();
	}
	void DoFun3()
	{
		m_pMyBody->DoFun3();
	}
};

客户端调用代码

#include "stdafx.h"

#include "Proxy.h"
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
	CProxyInterface *pProxy = new CProxy(new CDoFunA());
	pProxy->DoFun1();
	pProxy->DoFun2();
	pProxy->DoFun3();
	delete pProxy;
	return 0;
}


执行结果

总结

    代理模式应用很多,可以通过代理中转这个逻辑增加一层执行流程,这样我们方便在这个策略层里面增加和扩展,比如增加文件夹权限制等等,我刚写完的时候看着客户端代码想了几分钟,他策略理模式很像,几乎一样,策略模式注重的是对象之间的替换,而代理则是注重平等函数之间的代替。
                                                                               策略VS代理

原文地址:https://www.cnblogs.com/csnd/p/12062355.html