代码如下:
// Proxy.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
//定义接口
class Interface
{
public:
virtual void GiveDolls()=0;
virtual void GiveFlowers()=0;
virtual void GiveChocolate()=0;
};
//girl
class Girl
{
public:
string name;
/*public string Name;
{
get (return name);
set (name =value);
}*/
};
//真实类
class RealClass : public Interface
{
Girl mm;
public:
RealClass(Girl m)
{
mm.name=m.name;
}
public:
virtual void GiveDolls()
{
cout<<"Give You Dolls->"<<mm.name<<endl;
}
virtual void GiveFlowers()
{
cout<<"Give You Flowers->"<<mm.name<<endl;
}
virtual void GiveChocolate()
{
cout<<"GiveChocolate->"<<mm.name<<endl;
}
};
//代理类
class ProxyClass : public Interface
{
private:
RealClass* m_realClass;
public:
ProxyClass(Girl m)
{
m_realClass= new RealClass(m);
//m_realClass->Request();
//delete m_realClass;
}
virtual void GiveDolls()
{
m_realClass->GiveDolls();
}
virtual void GiveFlowers()
{
m_realClass->GiveFlowers();
}
virtual void GiveChocolate()
{
m_realClass->GiveChocolate();
}
};
//客户端:
int main()
{
//Girl m =new Girl();
Girl m;
m.name = "lily";
ProxyClass* test=new ProxyClass(m);
// test->Request(m);
test->GiveDolls();
test->GiveFlowers();
test->GiveChocolate();
return 0;
}
代理模式运用的场合一般分为以下几种:
第一:远程代理,也就是为了一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
第二:虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
第三:安全代理,用来控制真实对象访问时的权限。
第四:智能指引,是指当调用真实的饿对象时,代理处理另外一些事