博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(4)--代理模式
阅读量:4449 次
发布时间:2019-06-07

本文共 1654 字,大约阅读时间需要 5 分钟。

//4.代理模式//ver1//被追求者类class SchoolGirl{private:	string _name;public:	SchoolGirl(){}	SchoolGirl(string name)	{		_name = name;	}	string GetName()	{		return _name;	}	void SetName(string name)	{		_name = name;	}};//接口函数类class GiveGift{public:	GiveGift(){}	//Interface	virtual void GiveToy()	{		//...	}	virtual void GiveFlower()	{		//...	}};//追求者类class Pursuit : public GiveGift{private:	SchoolGirl _mm;public:	Pursuit(SchoolGirl mm)	{		_mm = mm;	}	void GiveToy()	{		_mm.GetName(); // + 送你玩具	}	void GiveFlower()	{		_mm.GetName(); // + 送你花	}};//代理类 //代理也去实现 "送礼物" 的接口class Proxy : public GiveGift{private:	Pursuit *pps;public:	Proxy(SchoolGirl mm)	{		pps = new Pursuit(mm);	}	void GiveFlower()	{		pps->GiveFlower(); //在实现方法中去调用"追求者"类的相关方法;	}	void GiveToy()	{		pps->GiveToy();	}};void main1(){	SchoolGirl mm("ysl");	Proxy *pp1 = new Proxy(mm);	pp1->GiveFlower(); //SchoolGirl不认识Pursuit,但可以通过Proxy得到礼物。	pp1->GiveToy();}//代理模式: 为其他对象提供一种代理以控制对这个对象的访问.

 

//4.代理模式//ver2//Subject: 定义了 RealSubject 和 Proxy 的共用接口。这样在任何使用 RealSubject的地方都可以使用Proxyclass Subject{public:	virtual void Request() = 0;};//RealSubject: 定义Proxy所代表的真实实体。class RealSubject : public Subject{public:	virtual void Request()	{		//真实请求	}};//Proxy: 保存一个引用使得代理可以访问实体。class Proxy : public Subject{private:	RealSubject *rs;public:	virtual void Request()	{		if (rs == NULL)		{			rs = new RealSubject();		}		rs->Request();	}};void main2(){	Proxy *pp1 = new Proxy();	pp1->Request();}

  

//代理模式场合:

//一.远程代理。也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
//二.虚拟代理。是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
//三.安全代理。用来控制真实对象访问时的权限。
//四.智能指引。当调用真实的对象时,代理处理另外一些事。

 

转载于:https://www.cnblogs.com/sylar-liang/p/6024713.html

你可能感兴趣的文章
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
sqlserver打开对象资源管理器管理的帮助文档的快捷键
查看>>
php 解决乱码的通用方法
查看>>
spring aop annotation
查看>>
RSA加密解密及RSA签名和验证
查看>>
解题报告:hdu1257 LIS裸题
查看>>
P2939 [USACO09FEB]改造路Revamping Trails
查看>>
Add some compression to your program
查看>>
动态识别类型
查看>>
JBOSSAS 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)
查看>>
Error: Could not find or load main class test.EditFile
查看>>
cocos2d-2.0-rc0a-x-2.0避免copy文件夹和库方法
查看>>
python提取隐含结构的字符串
查看>>
conversation with super KDL
查看>>
3. Git与TortoiseGit基本操作
查看>>
正則表達式匹配号码
查看>>
Codeforces Beta Round #10 B. Cinema Cashier (树状数组)
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
线段树
查看>>