Bridge(桥接)–对象结构模式

一、意图
将抽象部分与它的实现部分分离,使它们都可以独立的变化。

二、动机
1.由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。
2.如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?

三、适用性
1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
2.类的抽象以及它的实现都应该部分进行组合,并分别对它们进行扩充。
3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
4.(C++)你想对客户完全隐藏抽象的实现部分。在C++中,类的表示在类接口中是可见的。
5.有时必须将一个对象分解成两个部分。
6.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

四、结构

五、效果
1.分离接口及其实现部分。
2.提高可扩充性。
3.实现细节对客户透明。

六、实现
1.仅有一个Implementor。
2.创建正确的Implementor对象
3.共享Implementor对象。
4.采用多继承机制。

七、要点总结
1.Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自纬度的变化,即“子类化”它们。
2.Bridge模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。
3.Bridge模式的应用一般在“两个非常强的变化维度”,有时一个类也有多于两个的变化维度,这时可以使用Bridge的扩展模式。

八、相关模式
Abstract Factory模式可以用来创建和配置一个特定的Bridge模式
Adapter模式用来帮助无关的类协同工作,它通常在系统设计完成才会被使用。然而,Bridge模式则是在系统开始时就被使用,它使得抽象接口和实现部分可以独立进行改变

九、举例说明
注重两个维度的变化,感觉就像桥的两边各自改变各自的。实现变化,表现也可以变化。
看下图很容易理解

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

Bridge(桥接)--对象结构模式相关推荐

  1. java 组合对象_Java 中组合模型之对象结构模式的详解

    Java 中组合模型之对象结构模式的详解 一.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 二.适用性 ...

  2. C++设计模式-Bridge桥接模式

    作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...

  3. 操作复杂对象结构——访问者模式(三)

    26.3 完整解决方案 Sunny软件公司开发人员使用访问者模式对OA系统中员工数据汇总模块进行重构,使得系统可以很方便地增加新类型的访问者,更加符合"单一职责原则"和" ...

  4. java和设计模式(结构模式)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在设计模式中,有一类设计模式是比较有意思的,但是关注的人不多.这就是结构模式.如果说创建模式的重 ...

  5. 北风设计模式课程---创建模式、结构模式、行为模式的区别

    北风设计模式课程---创建模式.结构模式.行为模式的区别 一.总结 一句话总结: 创建模式:[关注对象的创建]:创建型模式,就是创建对象的模式,抽象了实例化的过程. 结构模式:结构型模式是为解决[怎样 ...

  6. 创建模式、结构模式、行为模式的区别

    创建模式 创建型模式,就是创建对象的模式,抽象了实例化的过程.  它帮助一个系统独立于如何创建.组合和表示它的那些对象.  关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建 ...

  7. 设计模式 创建模式 结构模式和行为模式

    创建型模式关注对象的创建 结构型模式关注类或对象之间的组织关系 行为型模式关注类或对象间的交互和职责分配(就是用来干什么) 模式从本质上都是简化和分解类或对象,使易于扩展或封装性更好:一些相似的模式的 ...

  8. PHP 设计模式 笔记与总结(9)数据对象映射模式

    [数据对象映射模式] 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作.例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数 ...

  9. Java设计模式分为创建模式, 结构模式, 行为模式 3种类型

    Java设计模式之创建模式包括: Factory,    工厂模式 Singleton,   单例模式 Builder,    建造模式 Prototype,    原型模式 Java设计模式之结构模 ...

最新文章

  1. Spark基础知识解答
  2. 皮一皮:这车是要开上天啊...
  3. JAVA基础中容易踩坑的知识点
  4. cmake 离线安装mysql_(cmake)编译安装mysql
  5. 开放下载!《iOS开发者必读资讯》
  6. Game of Hyper Knights LightOJ - 1315
  7. sap模块介绍_小迈说|SAP究竟有多少模块?
  8. [03] Android系统亮度调节
  9. 蓝色起源成功完成“新谢泼德号”飞船第17次发射
  10. 5 加盐_清洗桑葚时,有人加盐有人加碱,都不对!教你正确做法,太干净了
  11. 单片机与嵌入式的关系,单片机是嵌入式的子类
  12. jQuery-JS在iframe中获取父页面的值
  13. 中国新材料产业应用前景与十四五运营方向分析报告2021年版
  14. SuperMap iClient3D for WebGL实现三维管线分析
  15. word怎么压缩文件大小,word压缩变小
  16. win8.1老是断网LOL老是掉线.net错误 问题集(win7适用)
  17. 连接网络要求输入计算机密码是什么,上网时总是提示需要输入网络密码什么原因...
  18. [SFML]使用SFML复刻一个九宫幻卡小游戏(二)项目创建和SFML的配置
  19. 亚马逊ec2 ng 文件服务器,在亚马逊EC2云服务器上装完后访问不了
  20. 区块链是否是骗局?它是否有弊端?大神是这样回答的

热门文章

  1. C语言试题二十七之请编写程序,实现矩阵(3行3列)的转置(即行列互换)。
  2. Java之Callable和Runnable
  3. 链表之单链表约瑟夫问题(一)
  4. vscode搜索文件_VS Code 新图标来临 —— 侧边栏、文件管理器、搜索、调试等区域的图标迎来全新设计...
  5. postman安装_Postman插件的应用与实战(二)
  6. 一元二次方程求根公式的花样变换,你看懂了吗?
  7. 每日一笑 | 在俄罗斯人眼里,没有什么是胶带解决不了的
  8. 每天20分钟,只需一年,一年级学生英语听力达到六年级水平!关键是坚持一点都不难!
  9. java 中时间计算_java中关于时间的计算
  10. asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格