代理模式,为其他对象提供一种代理以控制对这个对象的访问。
代理模式应用:
1、远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
2、虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
3、安全代理,用来控制真实对象访问时的权限。
4、智能指引,当调用真实对象时,代理处理另外一些事。
#include <iostream> #include <string> using namespace std; class GiveGift //接口类 用于存放虚函数 { public: virtual void GiveDolls(){return;} //虚函数 送洋娃娃 virtual void GiveFlowers(){return;} //虚函数 送鲜花 virtual void GiveChocolate(){return;} //虚函数 送巧克力 }; class Girl //被追求者 接收礼物的女孩 { string m_name; //女孩名字 public: Girl(string name):m_name(name){}; //构造函数 传入女孩名字 string getname(){return m_name;} //获取女孩名字 }; class Pursult : public GiveGift //追求者类 { Girl* m_mm; //女孩类指针 public: Pursult(Girl* mm):m_mm(mm){}; //构造函数 传入被追求者 女孩 void GiveDolls() //虚函数的补全 送洋娃娃 { cout<<m_mm->getname()<<" 送你洋娃娃"<<endl; } void GiveFlowers() //虚函数的补全 送鲜花 { cout<<m_mm->getname()<<" 送你鲜花"<<endl; } void GiveChocolate() //虚函数的补全 送巧克力 { cout<<m_mm->getname()<<" 送你巧克力"<<endl; } }; class Proxy : public GiveGift //代理类 负责替追求者向女孩送礼物 { Pursult* gg; //追求者类指针 public: Proxy(Girl* mm) //构造函数 通过传入的女孩名字实例化追求者 { gg = new Pursult(mm); } void GiveDolls() //代理者送洋娃娃 { gg->GiveDolls(); } void GiveFlowers() //代理者送鲜花 { gg->GiveFlowers(); } void GiveChocolate() //代理者送巧克力 { gg->GiveChocolate(); } }; int main() { Girl* mm = new Girl("小雪"); //实例化女孩 Proxy* daili = new Proxy(mm); //实例化代理 daili->GiveDolls(); //代理者送洋娃娃 daili->GiveFlowers(); //代理者送鲜花 daili->GiveChocolate(); //代理者送巧克力 return 0; } 通过代理类,主函数中只需知道女孩类和代理类,而不需要知道追求者。