使用静态函数impl模式做接口#

impl即桥接模式,主要是为了隐藏数据和减少不必要的编译。

普通的impl模式做接口一般是:

A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B类对象指针,转做为基类指针,给使用者。代码示意如下:

// a.h
class A{ // 接口类 纯虚函数
virtual void add();
};
///////////////////////////////////////////
// b.h
#include "a.h"
class B:public A{ // 接口实现类
void add();
}
/////////////////////////////////////////
//
#include "a.h"
#include "b.h"
class C{ // 给使用者的类
A* GetA(){
return new B();
};
}
/////////////////////////////////////////
// c.cpp
#include "b.h"
#include "c.h"
// 类c的实现
A* C::GetA(){
return new B();
};
}

但是这样,用了三个类(也有是把第三个类用全局函数或全局对象代替),给使用者至少暴露两个类的头文件A和C;

最近有在看webrtc的音频模块时,看到使用静态函数的方法获取实现类对象,感觉很是精巧,对实现的隐藏性更好,也达到了减少文件暴露,使用者只要包含接口文件即可。

// a.h
class A{ // 接口类
static A* GetA(); // 静态函数,在实现类B的cpp文件实现
virtual void add();
};
///////////////////////////////////////////
// b.h
#include "a.h"
class B:public A{ // 接口实现类
void add();
}
///////////////////////////////////////////
// b.cpp
A* A::GetA(){
return new B();
}

调用静态函数getA()就可以获取实现类B的对象,对于使用者,只需要给接口类A的头文件,甚至使用者根本不知道实现类B的存在。

最新文章

  1. .NET简谈接口
  2. Couchbase介绍,更好的Cache系统
  3. [转]iptables详解
  4. keil中如何得知所编译程序所占空间大小?
  5. jquery-easyui中datagrid扩展,隐藏显示表头功能
  6. 使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错
  7. SQL一列多行字符串分组合并
  8. PHP扩展开发01:第一个扩展【转】
  9. iOS开发中常用到的加密方式
  10. node 与php整合
  11. Sum It Up(搜索)
  12. dell服务器从硬盘导入阵列信息
  13. SQLite 附加数据库(http://www.w3cschool.cc/sqlite/sqlite-attach-database.html)
  14. 百度地图--JS版
  15. postgre 常用语法,如 group_concat用法
  16. selenium与chrome浏览器及驱动的版本匹配
  17. Elasticsearch索引mapping的写入、查看与修改(转)
  18. PostgreSQL 自动输入密码
  19. django 聚合内容 RSS/Atom
  20. [SQL]SQL Server 事务及回滚事务

热门文章

  1. Apache的dbutils的架构图
  2. HTML学习
  3. 安装jhipster
  4. 使用Jquery.AJAX方法和PHP后台数据交互小结
  5. Java学习笔记-Math类
  6. vtk多线程简单测试
  7. AD域组策略-只显示指定的控制面板选项配置方法
  8. 【UWP】通过特定URI打开Win10指定设置页面[转]
  9. windows XP上实现python2.7.5和python3.4.3共存
  10. dubbo实践