《大话设计模式》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;
}