#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class SchoolGirl
{
public:
SchoolGirl(string name){m_name = name;}
string m_name;
};
//interface
class Givegift
{
virtual void GiveDolls() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
class Persuit : public Givegift
{
public:
Persuit(SchoolGirl* girl){m_girl = girl;}
virtual void GiveDolls()
{
cout<<"送洋娃娃给"<<m_girl->m_name<<endl;
}
virtual void GiveFlowers()
{
cout<<"送鲜花给"<<m_girl->m_name<<endl;
}
virtual void GiveChocolate()
{
cout<<"送巧克力给"<<m_girl->m_name<<endl;
}
private:
SchoolGirl *m_girl;
};
class Proxy : public Givegift
{
public:
Proxy(SchoolGirl *mm){gg = new Persuit(mm);}
virtual void GiveDolls(){gg->GiveDolls();}
virtual void GiveFlowers(){gg->GiveFlowers();}
virtual void GiveChocolate(){gg->GiveChocolate();}
private:
Persuit *gg;
};
int _tmain(int argc, _TCHAR* argv[])
{
SchoolGirl *jiaojiao = new SchoolGirl("李娇娇");
Proxy *daili = new Proxy(jiaojiao);
daili->GiveDolls();
daili->GiveFlowers();
daili->GiveChocolate();
return 0;
}
适用场合:
1.远程代理,也就是为一个对象在不同地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实(WebService)
2.虚拟代理,是根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真实对象,以达到性能最优化(浏览器优化下载)。
3.安全代理,用来控制真实对象访问时的权限;
4.智能指引,指当调用真实对象时代理处理另外一些事(引用计数器)。