代理模式
前序
卓贾易同学为了追求娇娇同学,于是要戴励同学帮他送洋娃娃,花和巧克力给娇娇同学.请你用代理模式来设计这些送东西的过程.
代理模式
代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。
实现方式(UML类图)
![](http://www.cppblog.com/images/cppblog_com/lwch/Proxy_001.PNG)
实现代码
#include <stdio.h>
class IGiveGift
{
public:
virtual void GiveDolls()=0;
virtual void GiveFlowers()=0;
virtual void GiveChocolate()=0;
};
class SchoolGirl
{
public:
char*& Name()
{
return name;
}
protected:
char* name;
};
class Pursuit : public IGiveGift
{
public:
Pursuit(SchoolGirl* _mm) : mm(_mm){}
virtual void GiveDolls()
{
printf("%s 送你洋娃娃\n",mm->Name());
}
virtual void GiveFlowers()
{
printf("%s 送你鲜花\n",mm->Name());
}
virtual void GiveChocolate()
{
printf("%s 送你巧克力\n",mm->Name());
}
protected:
SchoolGirl* mm;
};
class Proxy : public IGiveGift
{
public:
Proxy(SchoolGirl* mm)
{
gg = new Pursuit(mm);
}
~Proxy()
{
delete gg;
}
virtual void GiveDolls()
{
gg->GiveDolls();
}
virtual void GiveFlowers()
{
gg->GiveFlowers();
}
virtual void GiveChocolate()
{
gg->GiveChocolate();
}
protected:
Pursuit* gg;
};
int main()
{
SchoolGirl* jiaojiao = new SchoolGirl();
jiaojiao->Name() = "李娇娇";
Proxy* daili = new Proxy(jiaojiao);
daili->GiveDolls();
daili->GiveFlowers();
daili->GiveChocolate();
delete jiaojiao;
delete daili;
return 0;
}
运行结果
![](http://www.cppblog.com/images/cppblog_com/lwch/Proxy_002.PNG)
所有文件打包下载
posted on 2011-05-07 23:39
lwch 阅读(1933)
评论(7) 编辑 收藏 引用 所属分类:
设计模式