代理模式C++实现

代理模式UML图:


Subject:实例和代理的共用接口,使得在任何使用RealSubject的地方都可以使用Proxy;

RealSubject:实例;

Proxy:代理,它与RealSubject为依赖关系

代理模式代码示例:

代理接口类、实例类、代理类及client类定义和实现如下:

proxy.h

#ifndef PROXY_H
#define PROXY_H
#include <iostream>
#include <string>
using namespace std;

//代理接口
class GiveGift
{
	virtual void GiveDolls()=0;
	virtual void GiveFlowers()=0;
	virtual void GiveChocolate()=0;
};

//被追求者类
class SchoolGirl
{
private:
	string name;
public:
	SchoolGirl(string strname){name = strname;}
	string getName(){return name;}
};
class Pusuit:public GiveGift
{
private:
	SchoolGirl *mm;
public:
	//追求者是真正给女孩送礼物的对象
	Pusuit(SchoolGirl *mm1):mm(mm1){}
	void GiveDolls(){cout << "Give " << mm->getName() << " dolls" << endl;}
	void GiveFlowers(){cout << "Give " << mm->getName() << " flowers" << endl;}
	void GiveChocolate(){cout << "Give " << mm->getName() << " chocolate" << endl;}
};
class Proxy:public GiveGift
{
private:
	Pusuit *gg;
public:
	//追求者通过代理间接给女孩送礼物
	Proxy(SchoolGirl *mm1)
	{
		gg=new Pusuit(mm1);
	}
	//在代理的实现方法中实际调用的是追求者的相关方法
	void GiveDolls(){gg->GiveDolls();}
	void GiveFlowers(){gg->GiveFlowers();}
	void GiveChocolate(){gg->GiveChocolate();}
};
#endif
客户端代码如下:

#include "proxy.h"

int main()
{
	SchoolGirl *mm = new SchoolGirl("jiaojiao");

	Proxy *daili = new Proxy(mm);

	daili->GiveDolls();
	daili->GiveFlowers();
	daili->GiveChocolate();

	return 0;
}
代码输出如下:

代理模式的适用场合:

(1)远程代理:为一个对象在不同的地址空间提供局部对象;例:webservice在.net中的应用;

(2)虚拟代理:根据需要创建开销很大的对象,通过它来创建实例化需要很长时间的对象;例:浏览器中优化下载图片;

(3)安全代理:用来控制真是对象访问时的权限;

(4)智能指引:当调用真实的对象时,代理用来处理另外一些事;


总结:代理模式是在访问对象中引入一定程度的间接性,因为这种间接性,可以附加很多用途;

            代理就是真实对象的代表;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值