定义

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

他是用 组合关系 代替 继承关系 ,从而降低了抽象和实现两个维度的耦合度。

结构和实现

桥接模式包含以下角色:

  1. 抽象化角色:定义抽象类,并包含一个对实现化对象的引用;
  2. 扩展抽象化角色:是抽象化角色的子类,实现父类中的业务方法,调用实现化角色的方法;
  3. 实现化角色:定义接口,供扩展抽象化角色调用;
  4. 具体实现化角色:给出具体实现。

package bridge;public class BridgeTest {public static void main(String[] args) {Implementor imple = new ConcreteImplementorA();Abstraction abs = new RefinedAbstraction(imple);abs.Operation();}
}//实现化角色
interface Implementor {public void OperationImpl();
}//具体实现化角色
class ConcreteImplementorA implements Implementor {public void OperationImpl() {System.out.println("具体实现化(Concrete Implementor)角色被访问");}
}//抽象化角色
abstract class Abstraction {protected Implementor imple;protected Abstraction(Implementor imple) {this.imple = imple;}public abstract void Operation();
}//扩展抽象化角色
class RefinedAbstraction extends Abstraction {protected RefinedAbstraction(Implementor imple) {super(imple);}public void Operation() {System.out.println("扩展抽象化(Refined Abstraction)角色被访问");imple.OperationImpl();}
}

应用

当一个类内部具备两种或 多种变化维度 时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。

桥接模式的一个常见使用场景就是替换继承。我们知道,继承拥有很多优点,比如,抽象、封装、多态等,父类封装共性,子类实现特性。继承可以很好的实现代码复用(封装)的功能,但这也是继承的一大缺点。

因为父类拥有的方法,子类也会继承得到,无论子类需不需要,这说明继承具备强侵入性(父类代码侵入子类),同时会导致 子类臃肿 。因此,在设计模式中,有一个原则为优先使用 组合/聚合 ,而不是继承。

很多时候,我们分不清该使用继承还是组合/聚合或其他方式等,其实可以从现实语义进行思考。因为软件最终还是提供给现实生活中的人使用的,是服务于人类社会的,软件是具备现实场景的。当我们从纯代码角度无法看清问题时,现实角度可能会提供更加开阔的思路。

设计模式之—— 桥接模式 Bridge相关推荐

  1. 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

    如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...

  2. 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)

    文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...

  3. 设计模式之桥接模式(Bridge)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

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

    设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...

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

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

  6. 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  7. c++桥接模式bridge

    c++桥接模式bridge 概念 角色和职责 适用于 案例 概念 Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不 ...

  8. php设计模式之桥接模式

    php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...

  9. android 桥梁模式,【设计模式】桥接模式

    本文主要介绍:桥接模式概念和用法. 模式背景 生活中,我们如果一个笔有三种型号:大,中,小.颜色一共有M种.如果需要所有型号都有相对应的颜色,那么就需要3*M只笔.但是如果我们转换一下:M种颜色代表M ...

最新文章

  1. R语言tidyr包separate()函数实战详解:一列裂变为多列
  2. 使用ssh-keygen生成私钥和公钥
  3. js 获取鼠标在画布的位置_使用faceapi.js轻松将面部识别添加到你的应用程序
  4. Elasticsearch搜索引擎:ES的segment段合并原理
  5. Python数据结构————二叉查找树的实现
  6. 22 年过去了,Java 依然是开发者最爱的编程语言!
  7. linux cut 命令详解
  8. 深度学习笔记_ RestNet-50
  9. linux下的PDF阅读器
  10. Python正则表达式(一看就懂)
  11. 深度解析,马斯克最新发射的先进火箭
  12. 程序员常用资源工具集合(建议收藏)
  13. 通过ping检测网络故障的典型次序
  14. 爱乐乐益生菌有效解决宝宝从小慢性湿疹
  15. php语言开始和结束分别为,PHP语言参考
  16. 轩小陌的Python笔记-day08 模块一总结
  17. Oracle 数据库学习
  18. CATIA CAA二次开发专题(八)---自定义特征模型
  19. 为什么那么多人想开发一元夺宝类app?
  20. STM32F10X SPI操作flash MX25L64读写数据

热门文章

  1. python curses_简单的Python的curses库使用教程
  2. html5网站粒子时钟,利用HTML5实现SVG多边形粒子时钟动画特效
  3. MyBatisMySQL
  4. 倩女应用宝服务器,倩女幽魂手游应用宝版
  5. 如何将android的记事本文件倒进iphone,如何将vivo手机记事本同步到iPhone手机上
  6. 集装箱堆场建模调度计划(建模阶段)
  7. 硬盘加速和磁盘碎片整理软件
  8. Java 导入zip,并进行解压
  9. springboot 整合 apache camel实现企业级数据集成和处理
  10. 纳入3C强制性认证的产品目录