代理模式

定义:

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

  其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加许多用途。

结构图:

  

 

 代码:

//Subject 类

class Subject

{

//对外暴露的共用接口

public:

   void Request();

}

//RealSubject 类

class RealSubject : Subject

{

public:

//接口实际实现

 void Request()

  {

    。。。;

  }  

}

//Proxy类

class Proxy: Subject

{

//保存一个RealSubject对象,这样就可以用代理代替实体

RealSubject* cRealSubject; 

public:

//代理接口实现

 void Request()

  {

   if(cRealSubject == null)

    {

      cRealSubject = new RealSubject();

    }  

    //实现代理

    cRealSubject .Request();

  }  

}

//客户端

Proxy cProxy = new Proxy();

cProxy.Request();

 

使用时机:

  不想暴露实体的具体实现;

  虚拟代理,通过虚拟代理存放实例化需要很长时间的真实对象。比如图片。

  远程代理;

  智能指引;

 

优点:

  职责清晰;

  高扩展,只要实现了接口,就可以使用代理模式;

  智能化;

缺点:

  增加了中间类,可能会减慢处理速度;

  实现代理需要额外的工作,维护成本和复杂度增加。

posted @ 2020-07-19 23:36  吉尔加斯  阅读(188)  评论(0编辑  收藏  举报