#include <iostream>
#include <windows.h>
using namespace std;
/************************************************************************/
/* 例如:
/* 小明要给韩梅梅送花,但是小明不认识韩梅梅,但是李雷是韩梅梅的好朋友,小明和李雷是
/* 好朋友, 所以小明可以通过李雷(代理)送花给韩梅梅
/* 1.定义共同的协议,宾语
/* 2.代理和使用者都实现该协议
/************************************************************************/
class SchoolGril{
public:
string GetName()
{
return m_strName;
}
void SetName(const std::string& strName)
{
m_strName = strName;
}
private:
string m_strName;
};
interface GiveGift
{
virtual void GiveDolls() = 0;
virtual void GiveFollowers() = 0;
virtual void GiveChocolate() = 0;
};
class Pursuit : public GiveGift
{
public:
Pursuit(SchoolGril *pGirl)
{
m_pGirl = pGirl;
}
virtual void GiveDolls()
{
cout << m_pGirl->GetName().data() << "Give dolls" << endl;
}
virtual void GiveFollowers()
{
cout << m_pGirl->GetName().data() << "Give followers" << endl;
}
virtual void GiveChocolate()
{
cout << m_pGirl->GetName().data() << "Give chocolate" << endl;
}
private:
SchoolGril *m_pGirl;
};
class Proxy : public GiveGift
{
public:
Proxy(SchoolGril *pGril)
{
m_pPursuit = new Pursuit(pGril);
}
virtual void GiveDolls()
{
m_pPursuit->GiveDolls();
}
virtual void GiveFollowers()
{
m_pPursuit->GiveFollowers();
}
virtual void GiveChocolate()
{
m_pPursuit->GiveChocolate();
}
private:
Pursuit *m_pPursuit;
};
int main(int argc, char *argv[])
{
SchoolGril *pGirl = new SchoolGril();
pGirl->SetName("hanmeimei");
Proxy *p = new Proxy(pGirl);
p->GiveDolls();
p->GiveFollowers();
p->GiveChocolate();
getchar();
}
proxy model
最新推荐文章于 2024-04-24 09:53:34 发布