定义:为其他对象提供一种代理以控制对这个对象的访问。有四种常用的情况:(1)远程代理,(2)虚代理,(3)保护代理,(4)智能引用。
其实C++里面的智能指针也是代理模式...........我们操作的智能指针.其实执行的是智能指针里面包着的实质对象....
代理模式就是找个中间对象去处理不同的事情......听起来和策略模式差不多呢..........但有些不同...
策略模式是封装不同的算法....秘书和制作报告的方法不是同类.................秘书去选择并调用.
而代理模式中...........助理和执行者有相同的接口.......助理和执行者具有相同接口....
我们想想老板分配工作..
1)某天老板和助理说要完成A事情...
2)第二天老板和助理说要完成B事情..
class yuangong{
public:
virtual void kaihui()=0;
virtual void jiaban()=0;
};
class zhuli:public yuangong { //这里不继承也没关系.
public :
zhuli( yuangong *yg);
~zhuli(){delete m_pYuangong;}
void kaihui() { m_pYuangong->kaihui();}
void jiaban() { m_pYuangong->jiaban();}
private:
yuangong *m_pYuangng;
};
class A :public yuangong {
public:
void kaihui(){ cout<<"开会咯":}
void jiaban(){ cout<<"加班咯";}
};
class B :public yuangong {
public:
void kaihui(){cout <<"又要开会T_T";}
void jiaban(){cout<<"终于加班咯";}
};
class Boss
{
public:
void dokaihui() { yuangong *p = new zhuli( new A); p->kaihui(); delete p;}
void dojiaban() { yuangong *p = new zhuli(new B); p->jiaban(); delete p;}
}
要想成为助理,必须要清楚知道A和B可以干什么,秘书不一定继承于A,B的父类..............使用秘书就像在使用里面的执行者一样..秘书就可以成为代理,中介者.
其实这样有什么好处呢?为什么Boss不直接喊哪个部门做事
因为秘书可以在里面做一些统计和判断,,或者其他处理.. 把客户区和服务区分开来了......
引用一下: 代理模式可以很好的将前后端分开,实现了松散耦合。代理模式属于结构型模式。