码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之代理模式

时间:2015-03-14 23:16:13      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:c++   设计模式   

用一个给女孩子送礼物的例子,来讲述代理模式。

女孩子一般会比较害羞,所以追女孩子的方式是通过闺蜜转交的间接方式来给女孩子送礼物。 闺蜜是代表追求者送礼物,闺蜜只需要引用追求者,给被追求者转交礼物和话语即可。

直接上程序,比较简单:

#include<iostream>
#include<string>
using namespace std;


class Girl
{
	public:
		void setName(string name)
		{
			this->name = name;
		}
		string getName()
		{
			return name;
		}

	private:
		string name;
};
			

class GiveGift
{
	public:
		virtual void giveFlowers()=0;
};

class Pursuit : public GiveGift
{
	public:
		Pursuit(Girl *girl)
		{
			this->girl = girl;
		}
		void giveFlowers() 
		{
			cout <<  girl->getName() << "---You are so beautiful like flowers, I love u!" << endl;
		}


	private:
		Girl *girl;

};	

//BFF--best friend forever
class ProxyBFF : public GiveGift
{
	public:
		ProxyBFF(Girl *girl)
		{
			this->pursuit = new Pursuit(girl);
		}

		void giveFlowers()
		{
			
			pursuit->giveFlowers();
		}


		void showMyself()
		{
			cout << "我是闺蜜,我的名字是: " << name << endl;
		}

		void setName(string name)
		{
			this->name = name;
		}

	private:
		Pursuit *pursuit;
		string name;
};


int main()
{
	Girl *girl = new Girl();
	girl->setName("吴巧梅");

	ProxyBFF *proxy = new ProxyBFF(girl);
	proxy->setName("余莹莹");
	proxy->showMyself();
	proxy->giveFlowers();
	return 0;
}
运行结果:

zy@zy:~/code/designpattern/proxyPattern$ ./a.out 
我是闺蜜,我的名字是: 余莹莹
吴巧梅---You are so beautiful like flowers, I love u!


---------------------------------------------------------------------------------------------

分析:


代理通过添加一个中间层的方式,体现了面向对象的单一职责的思想。

正向代理和反向代理:

上面送礼物其实是正向代理的一个例子,也就是代理代表的是client,就像使用的代理,在浏览器里填一个代理服务器,然后上网都是通过代理服务器转发。

而反向代理,是和服务器位于一体的,代理的是server端,客户端并不知道反向代理服务器的存在,客户端请求,先到达代理服务器,代理服务器根据请求再去后台服务器去获取数据返还给客户端,可以将不同的业务放在不同的服务器上,从而达到负载均衡。nginx既可以做正向代理也就可以做反向代理服务器。


使用代理模式实现智能指针:



设计模式之代理模式

标签:c++   设计模式   

原文地址:http://blog.csdn.net/zy416548283/article/details/44264159

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!