代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问
例子:一个追求者通过一位代理人去追求一个女生,在客户端并不需要知道追求者的存在
UML:
//抽象类
class Gift {
public:
virtual void GiveDolls() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
//被追求者
class Girl {
private:
string m_name;
public:
Girl(string name):m_name(name){}
string Getname()
{
return m_name;
}
};
//追求者
class Pursuit :public Gift {
private:
Girl *m_girl;
public:
Pursuit(Girl *girl):m_girl(girl){}
void GiveDolls()
{
cout << m_girl->Getname() << " 送你洋娃娃" << endl;
}
void GiveFlowers()
{
cout << m_girl->Getname() << " 送你鲜花" << endl;
}
void GiveChocolate()
{
cout << m_girl->Getname() << " 送你巧克力" << endl;
}
};
//代理类
class Proxy :public Gift{
private:
Pursuit *m_persuit;
public:
Proxy(Girl *girl)
{
m_persuit = new Pursuit(girl);
}
void GiveDolls()
{
m_persuit->GiveDolls();
}
void GiveFlowers()
{
m_persuit->GiveFlowers();
}
void GiveChocolate()
{
m_persuit->GiveChocolate();
}
};
int main()
{
Girl *girl = new Girl("jiaojiao");
Proxy *proxy = new Proxy(girl);
proxy->GiveChocolate();
proxy->GiveDolls();
proxy->GiveFlowers();
system("pause");
return 0;
}