桥接模式是为了将对象的抽象与实现分离,使得它们可以独立变化。简简单单的一句话,却已经是站在了更高抽象层面上来看待、设计、解决问题。平常我们多是对具体问题进行分析、抽象,然后就开始设计,这对多数情况下基本完全够用,毕竟实际项目中的功能模块都是找一“最优解的"实现来解决掉问题,把功能设计出来即可。这种情况下的结构关系图参考如下:

这种抽象设计的缺点是:如果解决问题的方式不止一种,则必需为以上所有Concrete类都是实现对应的具体版本,这样不但类继承体系十分复杂,后期只要随便增加一种实现方式,都将要增加N个对应的新class。为解决这类问题,需要将问题的具体实现剥离出来单独抽象,并在问题抽象层面与实现抽象层面做个关联桥接即可。从而在问题抽象层面上,就不需要关心当前问题是如何被解决的(即:如何实现的)。改进后的类关系图(即:Bridge模式的类关系图参考如下):

从关系图中可看出,不论是日后增加新Target,还是扩展新实现方式,对于逻辑结构都不需要做调整,也不会因为扩展了新的实现而引起整个Target系列的动荡。模式的编码结构参考如下:

 1 namespace bridge
 2 {
 3     class IImpl;
 4     class ITarget
 5     {
 6     public:
 7         virtual void doSomething() = 0;
 8         // some code here........
 9
10     protected:
11         IImpl* getImpl() { return _impl; }
12
13     private:
14         IImpl* _impl;
15
16     };//class ITarget
17
18     class ConcreteTarget : public ITarget
19     {
20     public:
21         virtual void doSomething() override {
22             auto pImpl = this->getImpl();
23             if (nullptr != pImpl) {
24                 pImpl->realDoSomething();
25             }
26             // some other code here........
27         }
28
29     };//class ConcreteTarget
30
31     class IImpl
32     {
33     public:
34         virtual void realDoSomething() = 0;
35
36     };//class IImpl
37
38     class ConcreteImpl1 : public IImpl
39     {
40     public:
41         virtual void realDoSomething() override { /* some code here........ */ }
42
43     };//class ConcreteImpl1
44
45     class ConcreteImpl2 : public IImpl
46     {
47     public:
48         virtual void realDoSomething() override { /* some code here........ */ }
49
50     };//class ConcreteImpl2
51
52 }//namespace bridge

Bridge模式编码结构参考

转载于:https://www.cnblogs.com/tongy0/p/5526116.html

【结构型】Bridge模式相关推荐

  1. 设计模式(16):结构型-桥接模式(Bridge)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  2. 【设计模式_青春版】结构型|外观模式

    文章目录 外观模式(结构型) 外观模式又名门面模式 结构 外观模式案例 代码实现 优缺点 优点 缺点 使用场景 在tomcat中的 外观模式(结构型) 外观模式又名门面模式 是一种通过为多个复杂的子系 ...

  3. 设计模式(17):结构型-组合模式(Composite)(2)

    设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...

  4. 结构型 桥模式 -Bridge

    早上碰到MM,要说早上好,晚上碰到MM,要说晚上好:碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦.不要问我"早上碰到MM新做了个发型怎么说" ...

  5. JAVA设计模式(09):结构型-代理模式(Proxy)

    代理模式是经常使用的结构型设计模式之中的一个,当无法直接訪问某个对象或訪问某个对象存在困难时能够通过一个代理对象来间接訪问,为了保证client使用的透明性,所訪问的真实对象与代理对象须要实现同样的接 ...

  6. 结构型 组合模式 Composite

    Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使 用具有一致性. Mary今天过生日."我过生日,你要送我一件礼物. ...

  7. Java设计模式之结构型-桥接模式 (Bridge)

  8. [结构型] -- 外观模式

    外观模式的提出: 为复杂的子系统调用提供一个统一的入口,使子系统与客户的耦合度降低,且客户端调用非常方便. 就像在网站浏览时,开发者为我们设定的主页一样.这样我们就无需去记住所有的子网页的URL,只需 ...

  9. [设计模式-结构型]代理模式(Proxy)

    概括 名称 Proxy 结构 动机 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P ...

  10. [设计模式-结构型]外观模式(Facade)

    概括 名称 Facade 结构 动机 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一 ...

最新文章

  1. 到底什么是MiddleWare(中间件),请用plain English描述
  2. Spring-aop注解开发(切点表达式的抽取)
  3. 尤克里里怎么样_尤克里里和吉他区别?尤克里里与吉他相比有什么不可替代的优势...
  4. python的cmd下小白开发应用教程
  5. mysql optimize 参数查看_Mysql High Performance:Optimize Setting
  6. TextView跑马灯和editText抢占焦点,键盘弹不出来问题解决
  7. Hadoop配置文件详解
  8. 三凌PLC源码,STM32F205VCT6主控PLC控制器板,已批量生产
  9. oracle sequence nextval,SOS!!! Sequence.nextval 的问题
  10. devc++工程提示“源文件未编译”的可能问题
  11. java openoffic linux_Linux操作系统下安装Openoffice3.2
  12. 易到要在网约车市场突围并不容易
  13. PHP下制作图灵机器人程序
  14. 想在网上保持匿名?教你用Linux如何实现!
  15. 快速打点工具——Aopo工具
  16. js使用策略模式实现表单验证
  17. 基于RK3568开源鸿蒙的助农金融服务终端设计方案
  18. 笔记本屏幕亮度随着显示内容而变,时亮时暗
  19. Ansys Sherlock 热机械分析流程
  20. 51单片机ADC0808实时转换电压十进制形式数码管显示

热门文章

  1. mobi格式电子书_这几种电子书格式的关系与区别,资深Kindler有必要了解了解 !...
  2. vscode使用vuex数据持久化插件(vuex-persistedstate)
  3. vscode安装vetur不高亮解决
  4. idea往gitee上传项目
  5. 查看 svn 中本地项目的版本
  6. html中表格内容居右的写法
  7. Windows下部署yolov5实现口罩检测
  8. 中国买家团撑起2018芯片市场,华为千亿支出排名全球第三 | 盘点
  9. 请投量子位一票 | 2018年度明星学术公众号评选
  10. 用AI帮你画新年贺卡:只需输入几个单词,就能模仿大师名作