开始学习设计模式,今天是代理模式。
引用《大话设计模式》:
- 代理模式:为其他对象提供一种代理以控制对这个对象的访问
总结:控制对被代理对象的访问,接口与实现的彻底分离,可以在实际调用被代理对象时进行预处理,也可以灵活访问被代理对象的具体业务接口。
- Girl,被追求者
- GiveGift,代理和被代理者的统一接口
- Pursuit,追求者(被代理者)
- Proxy,代理
场景:某追求者追求某Girl,但是自己不好意思送礼物,委托代理proxy送礼物
#include <iostream>
#include <string>
using namespace std;
//代理模式
//这是被追求者
class Girl
{
public:
string name;
Girl(string &_name):name(_name)
{}
};
class GiveGift
{
public:
GiveGift() {}
virtual ~GiveGift() = 0
{}
virtual void GiveDoll() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
//这是追求者
class Pursuit :public GiveGift
{
public:
Pursuit(Girl *_girl):girl(_girl)
{}
~Pursuit() {}
// 通过 GiveGift 继承
virtual void GiveFlowers() override
{
cout << girl->name << " 送你花" << endl;
}
virtual void GiveChocolate() override
{
cout << girl->name << " 送你巧克力" << endl;
}
virtual void GiveDoll() override
{
cout << girl->name << " 送你洋娃娃" << endl;
}
private:
Girl *girl;
};
//这是代理
class Proxy :public GiveGift
{
public:
Proxy(Pursuit *_bro) :bro(_bro)
{}
~Proxy() {}
// 通过 GiveGift 继承
virtual void GiveFlowers() override
{
bro->GiveFlowers();
}
virtual void GiveChocolate() override
{
bro->GiveChocolate();
}
virtual void GiveDoll() override
{
bro->GiveDoll();
}
Pursuit *bro;
};
int main()
{
Girl *girl = new Girl(string("小花"));
Pursuit *boy = new Pursuit(girl);
Proxy *proxy = new Proxy(boy);
proxy->GiveChocolate();
proxy->GiveDoll();
proxy->GiveFlowers();
delete proxy;
delete boy;
delete girl;
system("pause");
return 0;
}