代理模式----代理追求者

来源:互联网 发布:js求数组最大值和下标 编辑:程序博客网 时间:2024/05/23 02:05

       代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。可以应用的场合:1、远程代理;2、虚拟代理;3安全代理;4、智能指引。(都没用过,不做介绍了)。

      以追求MM为例,小A喜欢MM小C,但是小C不认识小A,但是认识小A的好哥们小B,于是小A就买了礼物让小B代理他送给小C,并转达他的爱意。此时小A就是RealSubject类,而小B就是Proxy类,他们共同继承Subject抽象接口类即礼物类,小A是真正的送礼物的,所以他必须实现这个抽象接口类。小B是代理者,他必须调用小A实现的方法。

#include <iostream>#include <string>using namespace std;class SchoolGirl{private:string name;public:SchoolGirl( string& na ) : name(na){}string GetName(){return name;}void SetName(string& na){name = na;}};/* 代理接口 */class IGiveGift{public:virtual void GiveDolls() = 0;virtual void GiveFlowers() = 0;virtual void GiveChocolate() = 0;};/* 追求者 *//* 让追求者去实现送礼物的接口 */class Pursuit : public IGiveGift{private:SchoolGirl mm;public:Pursuit( SchoolGirl& m ) : mm(m){}virtual void GiveDolls(){cout<<mm.GetName()<<" 送你洋娃娃"<<endl;}virtual void GiveFlowers(){cout<<mm.GetName()<<" 送你鲜花"<<endl;}virtual void GiveChocolate(){cout<<mm.GetName()<<" 送你巧克力"<<endl;}};/* 代理模式 */class Proxy : public IGiveGift{private:Pursuit* gg; /* 指向被代理对象的指针 */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();}};int main(){string name = "娇娇";SchoolGirl sgirl(name);Proxy daili( sgirl );daili.GiveDolls();daili.GiveFlowers();daili.GiveChocolate();return 0;}


 

0 0