前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大话设计模式03-代理模式-2020-9-22

大话设计模式03-代理模式-2020-9-22

作者头像
用户7719114
发布2022-02-22 13:21:10
2950
发布2022-02-22 13:21:10
举报
文章被收录于专栏:C++小白

1.代理模式简介:

代理模式:为其它对象提供一种代理以控制对这个对象的访问。代理模式类图如下:client想要访问realsubject类时,可以通过proxy类访问。realsubject和proxy继承自subject父类,subject类中定义了统一的接口,realsubject定义接口具体实现,proxy接口调用该实现。

2.实例

追求者Persuit想要追求SchoolGirl,胆子比较小,只能通过Proxy去追。代码实现如下:

代码语言:javascript
复制
#include<exception>
#include <iostream>
#include<string>
using namespace std;
class GiveGift
{
public:
	virtual void giveFlowers() = 0;
	virtual void giveDolls() = 0;
	virtual void giveChocolate() = 0;
	virtual ~GiveGift(){};
};

class Persuit :public GiveGift
{
public:
	Persuit(SchoolGirl iGirl):m_girl(iGirl){}
	void giveFlowers()
	{
		cout << "give " + m_girl.getName() + " flowers" << endl;
	}
	void giveDolls()
	{
		cout << "give " + m_girl.getName() + " dolls" << endl;
	}
	void giveChocolate()
	{
		cout << "give " + m_girl.getName() + " chocolates" << endl;
	}
private:
	SchoolGirl m_girl;
};

class Proxy :public GiveGift
{
public:
	Proxy(Persuit iPersuit):m_persuit(iPersuit){}
	void giveFlowers()
	{
		m_persuit.giveFlowers();
	}
	void giveDolls()
	{
		m_persuit.giveDolls();
	}
	void giveChocolate()
	{
		m_persuit.giveChocolate();
	}
private:
	Persuit m_persuit;
};

int main()
{
	SchoolGirl girl("sjx");
	Persuit persuit(girl);
	Proxy proxy(persuit);
	proxy.giveFlowers();
	proxy.giveDolls();
	proxy.giveChocolate();
	system("pause");
}

3.总结

代理模式本质上是提供代理完成间接访问对象

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.代理模式简介:
  • 2.实例
  • 3.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档