代理模式,定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的访问。
通俗的来讲代理模式就是我们生活中常见的中间人。
比如说,小李想追求一个小姐姐娇娇,但是小李不知道怎么做,他委托戴励去追,这样的一个过程就是代理模式
下面是结构图
#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;
}