API装饰者模式--代理模式

概述

编写基于另外一组类的包装器接口,结构化设计模式可以处理接口包装任务。按照包装器层和原始接口的差异递增程度划分,它们以此是:代理、适配器和外观。

<1>代理模式

代理类和原始类拥有同样的接口,可以认为是一个单一组件包装器,

实现方式:代理类 存储 原始类的副本,但更可能是指向原始类的指针,然后代理类中的方法将重定向到原始类对象中的同名方法,

注意:将赋值构造函数和赋值操作函符声明为私有成员是为了阻止客户复制此对象


微信截图_20190402160855.png
class Proxy {
  public :
      Proxy() : mOrig(new Original()) {}
       ~Proxy(){
            delete mOrig;
      }
      
     bool DoSomething(int value) {
          return mOrig->DoSomething(value);
    }

private :
     Proxy(const Proxy &);
     const  Proxy &operator=(const Proxy &);
    Original *mOrig;
}

<1-1>代理模式

另一种方案是在此方案的基础上增加代理和原始API共享虚拟接口,目的是更好的保持这两个api同步

前提是能够修改原始API

class IOriginal {
  public:
        virtual bool DoSomething(int value) = 0;
};

class Original : public IOriginal {
  public:
  bool DoSomething(int value);
}

class Proxy : public IOriginal {
  public :
      Proxy() : mOrig(new Original()) {}
       ~Proxy(){
            delete mOrig;
      }
      
     bool DoSomething(int value) {
          return mOrig->DoSomething(value);
    }

private :
     Proxy(const Proxy &);
     const  Proxy &operator=(const Proxy &);
    Original *mOrig;
}

提示:代理提供了一个接口,此接口将函数调用转发到具有相同形式的另一个接口

试用场景

如果要修改Original类的行为但是要保持它的接口不变,代理模式非常适合,它尤其适用于Original是第三方库类,自己很难直接修改.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,800评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,920评论 2 9
  • 今天妈妈给我买了一张很奇快的纸,那是一张写毛笔字用的米字格。写字的时候,用毛笔,蘸点清水,写出来的字居然就是黑色的...
    段智耀阅读 851评论 0 0
  • 我喜欢你的风情 你喜欢我的单纯 我喜欢你的奔放 你喜欢我的腼腆 我喜欢你的热络 你喜欢我的恬静 你喜欢的正是我有的...
    暖笑如云阅读 1,391评论 0 1