代理模式,定義:代理模式給某一個對象提供一個代理對象,并由代理對象控制對原對象的通路。
通俗的來講代理模式就是我們生活中常見的中間人。
比如說,小李想追求一個小姐姐嬌嬌,但是小李不知道怎麼做,他委托戴勵去追,這樣的一個過程就是代理模式
下面是結構圖
#include<iostream>
#include <windows.h>
#include <string>
using namespace std;
// 被追求者類
class ShcoolGirl
{
public:
std::string GetName()
{
return m_strName;
}
void SetName(const char*pszName)
{
m_strName = pszName;
}
private:
std::string m_strName;
};
// 代理接口
class IGiveGift
{
virtual void GiveDolls() = 0; // 玩具
virtual void GiveFlowers() = 0; // 花
virtual void GiveChocolate() = 0; // 巧克力
};
//追求者類
class Pursuit :IGiveGift
{
public:
Pursuit(ShcoolGirl shMm):m_shMm(shMm)
{
}
public:
void GiveDolls()
{
std::string strGiveGift(m_strName);
strGiveGift.append(":送洋娃娃給");
strGiveGift.append(m_shMm.GetName());
std::cout << strGiveGift .c_str()<< std::endl;
}
void GiveFlowers()
{
std::string strGiveGift(m_strName);
strGiveGift.append(":送花給");
strGiveGift.append(m_shMm.GetName());
std::cout << strGiveGift.c_str() << std::endl;
}
void GiveChocolate()
{
std::string strGiveGift(m_strName);
strGiveGift.append(":送巧克力給");
strGiveGift.append(m_shMm.GetName());
std::cout << strGiveGift.c_str() << std::endl;
}
public:
void SetMyName(const char* pszName)
{
m_strName = pszName;
}
private:
std::string m_strName;
ShcoolGirl m_shMm;
};
// 代理類如下
class Proxy :IGiveGift
{
public:
Proxy(Pursuit *pPursuit)
{
m_PursuitGg = pPursuit;
}
void GiveDolls()
{
m_PursuitGg->GiveDolls();
}
void GiveFlowers()
{
m_PursuitGg->GiveFlowers();
}
void GiveChocolate()
{
m_PursuitGg->GiveChocolate();
}
private:
Pursuit* m_PursuitGg; // 追求者
};
int main()
{
ShcoolGirl shGirl;
shGirl.SetName("嬌嬌");
Pursuit *pPursuit = new Pursuit(shGirl);
pPursuit->SetMyName("小李");
Proxy proDaili(pPursuit);
proDaili.GiveDolls();
proDaili.GiveChocolate();
proDaili.GiveFlowers();
system("pause");
return 0;
}