设为首页 加入收藏

TOP

C++设计模式实现--桥接(Bridge)模式
2015-07-24 05:54:42 来源: 作者: 【 】 浏览:4
Tags:设计模式 实现 桥接 Bridge 模式

一. 举例

N年前:

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

\

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

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

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

N年后:

Windows出现了,Linux出现了,软件和硬件终于分离了。这时的系统比如 Windows 既能在IBM机器上运行,也能在HP机器上运行了。
<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPGltZyBzcmM9"https://www.cppentry.com/upload_files/article/49/1_de69f__.jpg" height="150" width="438" alt="\">

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

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

代码实现:

[cpp] view plaincopy
  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"< };
  12. //Linux
  13. class LinuxOS: public OS
  14. {
  15. public:
  16. void Run() { cout<<"运行 Linux"< };
  17. //计算机
  18. class Computer
  19. {
  20. public:
  21. virtual void InstallOS(OS *os) {}
  22. };
  23. //IBM 计算机
  24. class IBMComputer: public Computer
  25. {
  26. public:
  27. void InstallOS(OS *os) { os->Run(); }
  28. };
  29. //HP 计算机
  30. class HPComputer: public Computer
  31. {
  32. public:
  33. void InstallOS(OS *os) { os->Run(); }
  34. };
  35. int main()
  36. {
  37. OS *os1 = new WindowOS();
  38. OS *os2 = new LinuxOS();
  39. Computer *computer1 = new IBMComputer();
  40. computer1->InstallOS(os1);
  41. computer1->InstallOS(os2);
  42. return 0;
  43. }

    二. 桥接模式

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

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

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

    三. 组合、聚合复用原则

    \


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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ-1068 Parencodings 下一篇HDU 2444 The Accomodation of St..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: