#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
/*
代理模式 :追女生问题(大话设计模式中的案例)
*/
/*共同的接口*/
class givegift
{ public:
virtual void givedolls() = 0;
virtual void giveflowers() = 0;
virtual void givechocolate() = 0;
};
class schoolgirl
{
private:
string name;
public:
void set_name(string name)
{
this->name = name;
}
string get_name()
{
return name;
}
};
// 追求者
class pursuit: public givegift
{
schoolgirl mm;
public:
pursuit(schoolgirl mm)
{
this->mm = mm;
}
void givedolls()
{
cout <<mm.get_name()<<"送你洋娃娃"<< endl;
}
void giveflowers()
{
cout <<mm.get_name()<<"送你花儿"<< endl;
}
void givechocolate()
{
cout <<mm.get_name()<<"送你巧克力"<< endl;
}
};
//代理
class proxy: givegift
{
pursuit *gg;
public:
proxy(schoolgirl *mm)
{
gg = new pursuit(*mm);
}
void givedolls()
{
gg->givedolls();
}
void giveflowers()
{
gg->giveflowers();
}
void givechocolate()
{
gg->givechocolate();
}
};
//相当于客户端
int main()
{
schoolgirl *jiaojiao = new schoolgirl();
jiaojiao->set_name("李娇娇:");
proxy *daili = new proxy(jiaojiao);
daili->givedolls();
daili->giveflowers();
daili->givechocolate();
system("pause");
return 0;
}
总结:
这个模式就是用代理者将对代理者进行包装,并且继承共同的接口;其中GoF 对其定义是:
为其它对象提供一种代理以控制对这个对象的访问。