Bridge Pattern(桥接模式)

意图

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

【GOF95】在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。

* 抽象化
存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待【LISKOV94】。
* 实现化
抽象化给出的具体实现,就是实现化。
* 脱耦
所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。

将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。因此,桥梁模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。这就是桥梁模式的用意。

结构

桥梁模式所涉及的角色有:
抽象化(Abstraction)角色 :抽象化给出的定义,并保存一个对实现化对象的引用。
修正抽象化(Refined Abstraction)角色 :扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色 :这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接 口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层 的操作。
具体实现化(Concrete Implementor)角色 :这个角色给出实现化角色接口的具体实现。

例子

一个表就一个表带?

还是,一个表+多个可更换的表带?

桥接模式和适配器模式的区别

很多时候经常容易把桥接模式和适配器模式弄混。那什么时候用桥接,什么时候用适配器呢 ?

共同点:
桥接和适配器都是让两个东西配合工作

不同点:出发点不同。          
  适配器:改变已有的两个接口,让他们相容。  
  桥接模式:分离抽象化和实现,使两者的接口可以不同,目的是分离。

所以说,如果你拿到两个已有模块,想让他们同时工作,那么你使用的适配器。 如果你还什么都没有,但是想分开实现,那么桥接是一个选择。

桥接是先有桥,才有两端的东西 适配是先有两边的东西,才有适配器 。
桥接是在桥好了之后,两边的东西还可以变化。

桥模式并不同于适配器模式,适配器模式其实是一个事后诸葛亮,当发现以前的东西不适用了才去做一个弥补的措施。桥模式相对来说所做的改变比适配器模式早,它可以适用于有两个甚至两个以上维度的变化。

桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。

设计模式总结之Bridge Pattern(桥接模式)相关推荐

  1. 进阶学习(3.9) Bridge Pattern 桥接模式

    1, 什么是桥接 桥,  提供给两方, 或者多方相交汇的作用, 例如, A 函数想调用 B 函数, 常见的方法就是, 直接在A 中显式 调用B, 这样存在高耦合,  如果我们使用一个中间函数C, 在C ...

  2. bridge pattern -- 桥接模式

    Bridge模式又称为Handle/Body模式. 在软件系统中,经常面临着"某些结构复杂的对象"的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一 ...

  3. Java设计模式之结构型:桥接模式

    一.什么是桥接模式: 桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥.在现实生活中一个物品在搭配不同的配件时会产生不同的动作和结果, ...

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

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

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

    (一)定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.(将一个对象多维度的变化分离) ① 桥接模式主要用意是为了实现抽象部分与实现部分脱耦,使它们各自可以独立变化. ② 在开发过程中通常会 ...

  6. Bridge (桥接模式)

    文章目录 桥接模式 适用场景 UML 类图 代码实现 桥接模式 桥接模式(Bridge Pattern),也叫做桥梁模式,结构型设计模式的一种,这个模式相对来说有些难理解.桥接,顾名思义,就是用来连接 ...

  7. 设计模式与软考试题之桥接模式

    2009年上半年软件设计师考试下午试题最后一题考查桥接模式,原题如下: [全国计算机技术与软件专业技术资格(水平)考试 2009年上半年 软件设计师 下午试卷] 注:当年试题五.试题六和试题七三选一, ...

  8. 23种经典设计模式的java实现_3_桥接模式

    桥接模式的适用: 你不希望在抽象和它的实现部分之间有一个固定的绑定关系.例如:程序的实现部分在运行时需要被选择或者切换. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.这时Bridge模式 ...

  9. 设计模式解密(12)- 桥接模式

    1.简介 定义:将抽象部分与实现部分分离,使它们都可以独立的变化. 主要解决:在多维可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活. 何时使用:实现系统可能有多个角度分类,每一种角度都可能 ...

最新文章

  1. python怎么知道用哪个库使用-Python链接数据库,使用哪个库,怎么操作?
  2. 最邻近插值法(The nearest interpolation)实现图像缩放
  3. python vscode_VScode || 为VScode配置python环境
  4. Linux文件命名规则
  5. mysql练习(重)
  6. 02-06 Python库-random
  7. 拖动时候的样式怎么改_你对“挡拆”的死板印象是时候要改了!看看欧文、保罗都是怎么做的吧。...
  8. jsp(web作业)
  9. Python编程入门-第二章学习笔记
  10. PHP中如何获取字符串的长度
  11. BeagleboneBlack上u-boot的MLO文件是哪里来的
  12. 用python完成选股策略_python量化选股策略_量化股市
  13. luckysheet 国产超强纯前端在线excel表格功能强大 简单使用记录 异常报错记录及处理
  14. python实现游程编码(leetcode)
  15. php毕业论文致谢,zpw2000毕业论文致谢(本科毕业论文致谢词范文)
  16. 使用阿里云提供的短信服务发送短信(个人版)
  17. 华为云弹性公网IP服务,为企业敲开互联网大门
  18. 基于单片机的模拟风扇控制系统
  19. 状语从句不是简单句_so引导的状语从句
  20. 上海计算机5年制大专学校,上海五年制大专学校排名

热门文章

  1. 【手写系列】理解数据库连接池底层原理之手写实现
  2. 高效遍历Java容器
  3. Spring框架中的设计模式(三)
  4. MYSQL: MERGE引擎实现多分表的联合
  5. springboot com.mysql.cj.exceptions.CJException: Access denied for user 'root'@'localhost
  6. 第十一届蓝桥杯java B组第二场-试题A: 门牌制作
  7. C语言 数组传递与值传递讲解
  8. 写SpringBoot项目的时候,报错Ordinal parameter not bound
  9. Java 什么叫做实例化
  10. java super实例_java Super 用法详解及实例代码