代理(proxy)模式

代理模式属于23中常用设计模式之一,代理模式为目标对象提供一种代理来控制对这个对象的访问,在很多情况下,一个目标对象不适合或者不能被直接访问,这时就需要代理对象在客户端和目标对象中间完成中介的作用。

在实际应用中有好多代理模式的例子,例如C++中的智能指针就是普通指针对象的代理,它采用引用计数的方法管理指针,避免程序设计不当可能引起的内存泄露问题,智能指针通过运算符重载等方式实现原指针同样的操作接口,程序员(客户端)通过智能指针(代理对象)来使用目标对象(普通指针)。

代理模式的UML类图:


代理模式中涉及到以下角色:

Subject:抽象接口类,定义了真是对象和代理对象直接共同的接口。

Proxy:代理对象,代理对象实现了与真实对象完全相同的接口,因此才可以代理真实对象,代理对象内部包含真实对象的引用或者指针。

RealSubject对象:真实对象,Subject的实现类。

使用C++实现的代理模式如下:

class Subject
	{
	public:
		Subject(){}
		virtual ~Subject(){}
		virtual void Request() = 0;
	};

	class RealSubject :public Subject
	{
	public:
		RealSubject(){}
		~RealSubject(){}
		void Request()
		{
			cout << "RealSubject request function called" << endl;
		}
	};
	class Proxy :public Subject
	{
	public:
		~Proxy(){}
		Proxy(Subject *mSubject) :mRealSubject(mSubject){}
		void Request()
		{
			cout << "Proxy request called" << endl;
			mRealSubject->Request();
		}
	private:
		Subject*	mRealSubject;
	};






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值