代理模式:为其他对象提供一种代理以控制对这个对象的访问
使用的场合:
1 远程代理 为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实
2 虚拟代理 根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,例如网页中的图片
3 安全代理 控制真实对象访问时的权限,用于对象具有不同的访问权限
c++程序:
#include <iostream>
#include <string>
using namespace std;
class SchoolGirl
{
private:
string name;
public:
SchoolGirl(){}
SchoolGirl(string sname)
{
name = sname;
}
void SetName(string sname)
{
name = sname;
}
string GetName()
{
return name;
}
};
class IGiveGift
{
virtual void GiveDolls() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
class PuiSuit : public IGiveGift
{
private:
SchoolGirl *mm;
public:
PuiSuit(SchoolGirl *girl)
{
mm = girl;
}
void GiveDolls()
{
cout<<mm->GetName()<<" 送你的洋娃娃"<<endl;
}
void GiveFlowers()
{
cout<<mm->GetName()<<"送你的花"<<endl;
}
void GiveChocolate()
{
cout<<mm->GetName()<<"送你的巧克力"<<endl;
}
};
class Proxy :public IGiveGift
{
private:
PuiSuit *suit;
public:
Proxy(SchoolGirl *mm)
{
suit = new PuiSuit(mm);
}
~Proxy()
{
if(suit != NULL)
{
delete suit;
suit = NULL;
}
}
void GiveDolls()
{
suit->GiveDolls();
}
void GiveFlowers()
{
suit->GiveFlowers();
}
void GiveChocolate()
{
suit->GiveChocolate();
}
};
int main()
{
SchoolGirl *girl = new SchoolGirl();
girl->SetName("meinv");
Proxy *pro = new Proxy(girl);
pro->GiveChocolate();
pro->GiveDolls();
pro->GiveFlowers();
delete pro;
delete girl;
return 0;
}