通过大话设计模式中追求者、代理和女孩三者关系分析代理模式。首先,完成追求者通过代理送礼物给女孩。
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class SchoolGirl
{
public:
explicit SchoolGirl(string name):m_name(name){}
~SchoolGirl(){}
string m_name;
};
class CGift
{
public:
explicit CGift(){}
virtual ~CGift(){}
virtual void GiveFlowers() = 0;
virtual void GiveBook() = 0;
};
//追求者
class Pursuit : public CGift
{
public:
explicit Pursuit(SchoolGirl *G):m_G(G){}
virtual ~Pursuit(){}
//追求者来送礼物
virtual void GiveFlowers(){cout << "送花" << endl;}
virtual void GiveBook(){cout << "送书" << endl;};
SchoolGirl *m_G;//追求者看上的女孩
};
//代理代理和追求者为关联关系
class Proxy : public CGift
{
public:
explicit Proxy(SchoolGirl *G):m_Pursuit(new Pursuit(G)){}
virtual ~Proxy(){}
Pursuit *m_Pursuit;
//代理调用追求者函数从而实现代理只是帮助送
virtual void GiveFlowers(){m_Pursuit->GiveFlowers();}
virtual void GiveBook(){m_Pursuit->GiveBook();};
};
void main()
{
SchoolGirl *GG = new SchoolGirl("LM");//有个叫DLM的女孩
Proxy *DaiLi = new Proxy(GG);//代理受委托追LM
//代理代替追求者送礼物
DaiLi->GiveFlowers();
DaiLi->GiveBook();
system("pause");
}
上边就是代理模式的实现。
代理模式,为其他对象提供一种代理以控制对这个对象的访问。
代理模式结构图:
应用:
远程代理,为一个对象在不同的空间提供局部代表。这样就可以隐藏一个对象才在于不同地址空间的事实。
虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的对象
安全代理,用来控制真实对象访问时的权限
智能指引,当调用真实的对象时,代理处理另外一些事。
优点:
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事物,通过后期的代理完成事物。
代理对象可以再客户端和目标对象之间起到中介作用,这样起到了中介的作用和保护目标对象的作用。
高扩展性