《大话设计模式》C++实现之代理模式

《大话设计模式》C++实现之代理模式

写在前面

   本篇博客是本人学习《大话设计模式》之后的一个总结分享。原书是用c#编写的伪代码,此处本人将使用C++语言来实现书中的各种设计模式。由于时间有限,此处仅贴出经过设计模式优化后的代码(也就是书中的最终版代码)。此处代码均为自己编写,个别借鉴了其他优秀大佬博主的代码逻辑,此代码仅供学习交流,不做其他商业用途。

代理模式

直接上代码!注释里有简单讲解

#include<iostream>
#include<string>
/*一共四个类:送礼物类、女孩类、追求者类、代理类。
追求者类和代理类均需继承送礼物类,
他们都要包含送礼物类里的各个函数。
送礼物类里声明了三个行为函数(送玩偶、送鲜花、送巧克力)。*/
using namespace std;

class GiveGift {   //送礼物类
//三个行为函数
public:
	virtual void GiveDolls() = 0;
	virtual void GiveFlowers() = 0;
	virtual void GiveChocolate() = 0;

	virtual~GiveGift() {};  //析构
};

class SchoolGirl {    //女孩类,主要是设置姓名
public :
	string name;

	string SetName(string name)
	{
		this->name = name;
		return name;
	}
};

class Pursuit:public GiveGift {  //追求者类,继承送礼物类
	SchoolGirl *mm;
public:

	Pursuit(SchoolGirl *mm)
	{
		this->mm = mm;
    }

	void GiveDolls() {
		cout << mm->name<< " 送你洋娃娃" << endl;
	}
	void GiveFlowers() {
		cout << mm->name << " 送你小花花" << endl;
	}
	void GiveChocolate() {
		cout << mm->name << " 送你巧克力" << endl;
	}

};

class Proxy :public GiveGift {   //代理类,继承送礼物类
public:
	
	Pursuit* gg;        //传入追求者

	Proxy(SchoolGirl* mm)
	{
		gg = new Pursuit(mm);
	}
	
	void GiveDolls() {       //执行的实际是追求者的行为,
	                          //只是代理者代为执行
		gg->GiveDolls();
	}
	void GiveFlowers() {
		gg->GiveFlowers();
	}
	void GiveChocolate() {
		gg->GiveChocolate();
	}
};

int main()
{
	SchoolGirl * Gmia =new SchoolGirl();
	Gmia->SetName("敏敏妹儿");
	//Pursuit *gg = new Pursuit(Gmia);
	Proxy *daili =new Proxy(Gmia);  
	 //所以主函数只需认识(初始化)代理者的对象,
	//由代理者执行,客户端不需认识追求者

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


	if (Gmia!=NULL) {
		delete Gmia;
		Gmia = nullptr;
	}
	if (daili != NULL) {
		delete daili;
		daili = nullptr;
	}
	

	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值