一. 举例

N年前:

计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上。

这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux。

其实,上面几家公司开发的软件和硬件在很多地方都有相似之处,如果每家公司都做自己的系统,这意味着资源和人员的极大浪费。

这时,无论出现新的系统,还是出现新的公司,对这种设计模式的修改都是很大的。

N年后:

Windows出现了,Linux出现了,软件和硬件终于分离了。这时的系统比如 Windows 既能在IBM机器上运行,也能在HP机器上运行了。

这时软件专注于软件,硬件专注于硬件。这也是推动计算机系统不断发展的原因(更加专注了嘛),也是推动更多公司出现的原因(成本更低了嘛)。

不管是出现了新硬件平台,还是出现新的OS,大家都能专注于自己领域。也就是外界的变化很大,但对这种模式冲击却很小。

代码实现:

  1. //操作系统
  2. class OS
  3. {
  4. public:
  5. virtual void Run() {}
  6. };
  7. //Windows
  8. class WindowOS: public OS
  9. {
  10. public:
  11. void Run() { cout<<"运行 Windows"<<endl; }
  12. };
  13. //Linux
  14. class LinuxOS: public OS
  15. {
  16. public:
  17. void Run() { cout<<"运行 Linux"<<endl; }
  18. };
  19. //计算机
  20. class Computer
  21. {
  22. public:
  23. virtual void InstallOS(OS *os) {}
  24. };
  25. //IBM 计算机
  26. class IBMComputer: public Computer
  27. {
  28. public:
  29. void InstallOS(OS *os) { os->Run(); }
  30. };
  31. //HP 计算机
  32. class HPComputer: public Computer
  33. {
  34. public:
  35. void InstallOS(OS *os) { os->Run(); }
  36. };
  37. int main()
  38. {
  39. OS *os1 = new WindowOS();
  40. OS *os2 = new LinuxOS();
  41. Computer *computer1 = new IBMComputer();
  42. computer1->InstallOS(os1);
  43. computer1->InstallOS(os2);
  44. return 0;
  45. }

二. 桥接模式

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

换句话出,就是要把实现独立出来,让它们各自变化,而不会影响其它实现,这样可以降低耦合性。

为什么叫Bridge 模式,从上图中可以看出,它像一座桥,桥两边的系统相对独立,左边是抽象部分,右边是实现部分。

三. 组合、聚合复用原则

由上面两个种结构图的对比,我们可以引出一个原则:尽量使用组合、聚合,尽量不要使用类继承。

最新文章

  1. Html,Css,Dom,javascript细节总结
  2. js string 转 int Number()
  3. 仿网易新闻 ViewPager 实现图片自动轮播
  4. xp下安装jdk8
  5. es6+移动轮播插件
  6. 【JAVA集合框架之Set】
  7. easyui-helloworld
  8. IIS配置及防黑
  9. 基于异步的MVC webAPI控制器
  10. iocfont 网页图标字体以及使用方法
  11. T4模板使用
  12. TFT1.44显示屏
  13. C++ GetSystemDirectory()
  14. phpstorm自定义代码片段
  15. laravel中的plicy授权方法:
  16. Example [mybatis] 的用法
  17. Python 网络编程相关知识学习
  18. 在Vim中使用gtags
  19. Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试
  20. linux sudo使用学习记录

热门文章

  1. 读《深入理解Elasticsearch》点滴-查询二次评分
  2. Docker系列(一):容器监控工具Weave Scope安装
  3. CSS技巧 (3)
  4. spring5 源码深度解析----- AOP代理的生成
  5. Java 学习笔记之 实例变量非线程安全
  6. java中List、Set和Map三个接口及其主要实现类
  7. Java的动手动脑
  8. Huffman树及其编解码
  9. [AI开发]视频结构化类应用的局限性
  10. 为什么不同命名空间的docker容器可以相互通信?