设计模式之代理模式

来源:互联网 发布:java微服务架构有哪些 编辑:程序博客网 时间:2024/06/03 16:21

设计模式之代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问

顾名思义,这个模式的关键字就是代理,那么什么是代理呢,举个例子吧,假如有一家大型饮用水公司,准备在一个大学开辟市场,这家公司的老板对这个大学不是很熟悉,大学里面的学生也根本不认识这个老板,这个时候呢,老板就需要在学校找一个代理了,这个代理的工作主要就是代替老板来对学校的管理,来开辟市场,但是基本上他做的工作就是老板要求的,也就是老板需要做的工作,他方便和学校里学生进行交流的

下面我们写一写这个例子的代码

#include<iostream>#include<string>using namespace std;class Student{public:Student(string name){this->name = name;}void setName(string name){this->name = name;}string getName(){return name;}private:string name;};class Company{public://提供水virtual void SupplyWater() = 0;//收费virtual void Charge() = 0;};class Boss :public Company{private:Student* student;public:Boss(Student* stu){student = stu;}void SupplyWater(){cout << "给" << student->getName() << "提供水" << endl;}void Charge(){cout << "收取" << student->getName() << "的费用" << endl;}};//代理的工作就简单了,他就是调用老板给出的动作,其实全是老板的决定class Proxy:public Company{private:Boss* boss;public://因为老板不认识学生,但是代理认识,这个时候就需要通过代理给老板传对象Proxy(Student* student){boss = new Boss(student);}void SupplyWater(){boss->SupplyWater();}void Charge(){boss->Charge();}};int main(void){Student* stu = new Student("大学生");//代理只是代替老板完成动作Company* pro = new Proxy(stu);pro->SupplyWater();pro->Charge();return 0;}
通过这个例子应该对代理很好理解了吧

下面我们看一看代理的代码

class Subject{public:virtual void Requset() = 0;};class RealSubjcet :public Subject{public:void Requset(){cout << "真实的请求" << endl;}};class Proxy :public Subject{private:RealSubjcet* rel;public:Proxy(){rel = new RealSubjcet();}void Requset(){rel->Requset();}};
代理模式一般可以分为四类
1、远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实
2、虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象
3、安全代理:用来控制真实对象访问的权限
4、智能指针:是指当调用真实对象时,代理处理另外一些事
优点:权限的控制,可以通过代理对象来控制用户对一个具有非常多的敏感功能对象的访问


原创粉丝点击