可以简记为pointer to implement:”指向实现的指针”。

[DP]书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。考虑装操作系统,有多种配置的计算机,同样也有多款操作系统。如何运用桥接模式呢?可以将操作系统和计算机分别抽象出来,让它们各自发展,减少它们的耦合度。当然了,两者之间有标准的接口。这样设计,不论是对于计算机,还是操作系统都是非常有利的。下面给出这种设计的UML图,其实就是桥接模式的UML图。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define debug(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
  5.  
  6. class COS
  7. {
  8. public:
  9. COS() {cout << "OS()" << endl;}
  10. virtual ~COS() {cout << "~OS()" << endl;}
  11. virtual void Run(){}
  12. };
  13.  
  14. class CLinuxOS : public COS
  15. {
  16. public:
  17. CLinuxOS() {cout << "CLinuxOS()" << endl;}
  18. ~CLinuxOS() {cout << "~CLinuxOS()" << endl;}
  19. void Run(){cout << "LinuxOS run()" << endl;}
  20. };
  21.  
  22. class CUnixOS : public COS
  23. {
  24. public:
  25. CUnixOS() {cout << "CUnixOS()" << endl;}
  26. ~CUnixOS() {cout << "~CUnixOS()" << endl;}
  27. void Run(){cout << "CUnixOS run()" << endl;}
  28. };
  29.  
  30. class CComputer
  31. {
  32. public:
  33. CComputer() {cout << "CComputer()" << endl;}
  34. virtual ~CComputer() {cout << "~CComputer()" << endl;}
  35. virtual void InstallOS(COS *os){}
  36. };
  37.  
  38. class CIBMComputer : public CComputer
  39. {
  40. public:
  41. CIBMComputer() {cout << "CIBMComputer()" << endl;}
  42. ~CIBMComputer() {cout << "~CIBMComputer()" << endl;}
  43. void InstallOS(COS *os){ os->Run();}
  44. };
  45.  
  46. class CHPComputer : public CComputer
  47. {
  48. public:
  49. CHPComputer() {cout << "CHPComputer()" << endl;}
  50. ~CHPComputer() {cout << "~CHPComputer()" << endl;}
  51. void InstallOS(COS *os){ os->Run();}
  52. };
  53.  
  54. int main(int argc, char *argv[])
  55. {
  56. COS *os = new CLinuxOS();
  57. CComputer *cmptr = new CIBMComputer();
  58. cmptr->InstallOS(os);
  59. delete cmptr;
  60. cmptr = NULL;
  61. delete os;
  62. os = NULL;
  63. return ;
  64. }

第二个示例:

  1. #ifndef SOLUTION_H
  2. #define SOLUTION_H
  3.  
  4. struct CImplement;
  5. class CAbstractSample
  6. {
  7. public:
  8. CAbstractSample();
  9. virtual ~CAbstractSample();
  10. void abstractDo();
  11. private:
  12. CImplement *m_impl;
  13. };
  14.  
  15. #endif // SOLUTION_H

solution.h

  1. #include "solution.h"
  2. #include <iostream>
  3. using namespace std;
  4. struct CImplement{
  5. void doSomething(){
  6. cout << "CImplement doSomething()" << endl;
  7. }
  8. };
  9.  
  10. CAbstractSample::CAbstractSample():m_impl(new CImplement)
  11. {
  12. cout << "CAbstractSample()" << endl;
  13. }
  14.  
  15. CAbstractSample::~CAbstractSample()
  16. {
  17. if(m_impl != NULL)
  18. {
  19. delete m_impl;
  20. m_impl = NULL;
  21. }
  22. cout << "~CAbstractSample()" << endl;
  23. }
  24.  
  25. void CAbstractSample::abstractDo(){
  26. m_impl->doSomething();
  27. }

solution.cpp

  1. #include "solution.h"
  2. #include <iostream>
  3. using namespace std;
  4. struct CImplement{
  5. void doSomething(){
  6. cout << "CImplement doSomething()" << endl;
  7. }
  8. };
  9.  
  10. CAbstractSample::CAbstractSample():m_impl(new CImplement)
  11. {
  12. cout << "CAbstractSample()" << endl;
  13. }
  14.  
  15. CAbstractSample::~CAbstractSample()
  16. {
  17. if(m_impl != NULL)
  18. {
  19. delete m_impl;
  20. m_impl = NULL;
  21. }
  22. cout << "~CAbstractSample()" << endl;
  23. }
  24.  
  25. void CAbstractSample::abstractDo(){
  26. m_impl->doSomething();
  27. }
  28.  
  29. int main(int argc, char *argv[])
  30. {
  31. CAbstractSample *as = new CAbstractSample();
  32. as->abstractDo();
  33. delete as;
  34. as = NULL;
  35. return ;
  36. }

$ g++ -g -Wall -std=c++0x solution.cpp main.cpp -o xmain

c++桥接模式的更多相关文章

  1. BridgePattern(桥接模式)

    /** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public ...

  2. PHP设计模式(八)桥接模式(Bridge For PHP)

    一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...

  3. 设计模式(八)桥接模式(Bridge Pattern)

    一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视 ...

  4. 设计模式--桥接模式Bridge(结构型)

    一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...

  5. vmware中虚拟机与主机ping不通,桥接模式,IP地址在同一网段,无法互ping!

    现象描述:网卡选用的桥接模式,IP地址在同一个网段,虚拟机内部可以正常上网,但是Guest OS和Host OS无法互ping! 原因:虚拟机里的防火墙没有关闭,导致禁用ping功能. 解决方法:关闭 ...

  6. 桥接模式/bridge模式/对象结构型

    意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 动机 当一个抽象类有多个实现时,通常用继承来协调它们.但是继承机制将抽象和实现固定,难以对抽象部分和实现部分独立地进行修改.扩充和重用. ...

  7. Objective-C 桥接模式 -- 简单实用和说明

    桥接模式---把两个相关联的类抽象出来, 以达到解耦的目的 比如XBox遥控器跟XBox主机, 我们抽象出主机和遥控器两个抽象类, 让这两个抽象类耦合 然后生成这两个抽象类的实例XBox & ...

  8. C#设计模式-桥接模式

    这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控 ...

  9. C#设计模式系列:桥接模式(Bridge)

    1.桥接模式简介 1.1>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...

  10. 《JS设计模式笔记》 4,桥接模式

    //桥接模式的作用在于将实现部分和抽象部分分离开来,以便两者可以独立的变化. var singleton=function(fn){ var result; return function(){ re ...

随机推荐

  1. spfa 单源最短路究极算法

    学习博客链接:SPFA 求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm.     SPFA算法是西南交通大学段凡丁于1994年发表的.    从名字我 ...

  2. libgdx学习记录22——3d物体创建

    libgdx是一个强大的游戏框架,不仅支持2d部分,同时还支持3d部分. libgdx的3d部分投影主要通过PerspectiveCamera实现. 物体的显示过程: 1. 创建远景相机,角度一般设为 ...

  3. centos 7 搭建开源堡垒机 Teleport 遇到的问题解决

    不得不说 centos7 的环境版本就是高,没有再出现6.5下那些依赖组件的版本支持过低的错误了,所以说现在个人用户还是推荐用7,企业生产环境的话,可能6.5适合一些,至少2年前是这样. 安装过程:  ...

  4. 异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解决方案

    原来是因为 AssetsMapper.xml 不知道为什么不见了,导致这个异常,在启动项目时的启动任务里调用到了它,然后因为没有这个xml,所以抛出异常 启动信息: C:\extend\Develop ...

  5. 内存和CPU资源控制

    数据库系统的资源是指内存和CPU(处理器)资源,拥有资源的多寡,决定了数据查询的性能.当一个SQL Server实例上,拥有多个独立的工作负载(workload)时,使用资源管理器(Resource ...

  6. Js_数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  7. 《杜增强讲Unity之Tanks坦克大战》10-相机控制

    10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内.   image 在Hierarchy点击右键   image 点击 Create Empty,生成空对象,改名 ...

  8. 2017中国人工智能公司榜单发布,颠覆AT的AI独角兽全在这

    每年12月,创业邦研究中心评选并报道“中国创新成长企业100强”,这个榜单我们已经连续做了8年,是中国最有潜力的创业新贵榜,受到了业内广泛认可.从2015年开始我们发现,人工智能上榜企业明显增多,20 ...

  9. 2013337朱荟潼 Linux第五章读书笔记——系统调用

    摘要: [20135337朱荟潼]原创作品转载请注明出处 第五章 系统调用 5.1 与内核通信 中间层 作用三个:1.为用户空间提供一种硬件的抽象接口:2.保证系统稳定和安全:3.除异常和陷入,是内核 ...

  10. “数学口袋精灵”App的第二个Sprint计划----开发日记

    一.现状 在第一个sprint计划中,我们已经初步完成了“数学口袋精灵”App的基本框架,现在我们要继续完善app,使其功能更加强大,界面更加有趣. 二.任务认领 完成界面后的后续任务: 冯美欣:欢迎 ...