说明:

模块型代码中经常可以看到有一些类叫做 class Aimpl , 同时还会存在一个叫 class A的类,从名称上看 Aimpl 是 A 的 implement  。 实际上,A 往往是当前模块对外的 api 类,即其他模块如果需要使用当前模块,只需要实例化一个 A 就可以用了。那么 Aimpl 又是什么,如果观察代码就可以发现 A 的成员函数除了调用 Aimpl 的同名成员函数外,什么都没做,也就是说把逻辑实现部分放到了 impl 中,而对外暴露的接口则是 A。 可以参照 Android 的 drm 模块里的 DrmManagerClient 和 DrmManagerClientImpl 。

这样做的目的有两个:

1)通过 A 的包装隐藏实际的业务逻辑和成员变量,具体的方式就是在A里面增加一些业务不相关的功能性函数,甚至是static函数。

2)提供兼容性,比如现在想要替换一套impl,只需要在实现一个Aimpl2,然后在A的构造函数中创建Aimpl2,而不是创建Aimpl,即可。

简言之,一是隐藏实现,二是替换方案时对上层兼容。

举例:

DrmManagerClient.cpp

DrmManagerClient::DrmManagerClient():mUniqueId(0), mDrmManagerClientImpl(NULL) {mDrmManagerClientImpl = DrmManagerClientImpl::create(&mUniqueId, true);mDrmManagerClientImpl->addClient(mUniqueId);
}

参考:

C++ IMPL 模式解析(上)_myw31415926的博客-CSDN博客

C++ IMPL 模式解析(下)_myw31415926的博客-CSDN博客

[设计模式] IMPL 模式相关推荐

  1. 重学Java设计模式-创建者模式-工厂方法模式

    重学Java设计模式-创建者模式-工厂方法模式 内容摘自:重学 Java 设计模式:实战工厂方法模式「多种类型商品不同接口,统一发奖服务搭建场景」 | bugstack 虫洞栈 工厂方法模式介绍 图片 ...

  2. Springboot 使用设计模式- 策略模式

    前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...

  3. 设计模式 访问者模式

    文章目录 访问者模式 访问者模式实战 访问者模式 在相同的数据结构下, 增加容易变化的业务访问逻辑, 为了增强扩展性, 将易变的访问逻辑进行解耦的一种设计模式. 访问者模式实战 模拟学校中, 有老师和 ...

  4. C++ IMPL 模式解析(上)

    文章目录 抛砖引玉 C++ IMPL 模式 完全隐藏成员变量 抛砖引玉 试想一个问题,如果有一套收发数据的网络接口,需要提供给其他同事或厂家使用,包含头文件和动态库,假设头文件如下: // 版本1 c ...

  5. 设计模式——桥接模式实验报告

    目录 设计模式--桥接模式实验报告 一.实验题目 二.所用模式结构视图 三.本实例类图 四.实例实现代码 1.抽象消息类 2.普通消息类 3.加急消息类 4.特急消息类 5.实现发送消息的统一接口: ...

  6. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  7. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  8. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  9. Python设计模式-解释器模式

    Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...

最新文章

  1. 对于PS和flash协作做过光字的一点心得
  2. Python的 5 种高级用法,效率提升没毛病!
  3. 惯用过程模型_惯用的Ruby:编写漂亮的代码
  4. python库_python使用ctypes库调用DLL动态链接库_python
  5. SAP License:ERP概述
  6. prometheus 发送恢复 值_基于prometheus+grafana+alertmanager监控系统配置钉钉告警
  7. com词根词缀_【单词杂谈】推荐几个学习英语词根词缀的网站,建议收藏!
  8. 朴素贝叶斯算法实现新闻分类(Sklearn实现)
  9. php栏目一二级排序,灵动标签完美实现当前栏目高亮-支持二级栏目及内容页及栏目排序...
  10. 饮水机和水桶图解RAID方式,强烈推荐
  11. leetcode695岛屿的最大面积
  12. 前端的几种数据存储方式
  13. Allegro如何导入高清Logo、二维码、防静电标识等图片以及汉字
  14. moviepy音视频剪辑:颜色相关变换函数blackwhite、colorx、fadein/out、gamma_corr、invert_colors、lum_contrast、mask_color介绍
  15. 教会微信:突破文件发送100M限制
  16. 小试牛刀【自己翻译】
  17. 英语语法最终珍藏版笔记-14独立主格结构
  18. dnf过年服务器维护否,DNF服务器或发生重大漏洞,玩家:维护这么慢,这些BUG修复了吗?...
  19. 新手福音,史上最详细的ALLEGRO导出GERBER教程!
  20. at91rm9200 rtl8201 网络不通

热门文章

  1. Java、javascript、JS和JScript区别
  2. (三)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - Nginx环境搭建
  3. UDS之浅谈11服务
  4. 小菜鸡刷CTF(二)
  5. java反射机制是什么_java中的反射机制是什么?
  6. 吐血整理:最受欢迎的250份学习资料,99%的DBA都收藏了!
  7. python web论坛_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)
  8. sublimelinter java_学习使用sublime插件sublimeLinter
  9. 超全!嵌入式系统词汇速查表
  10. json字符串转成 json对象 json对象转换成java对象