文章目录

  • 桥接模式
  • 适用场景
  • UML 类图
  • 代码实现

桥接模式

桥接模式(Bridge Pattern),也叫做桥梁模式,结构型设计模式的一种,这个模式相对来说有些难理解。桥接,顾名思义,就是用来连接两个部分,为被分离了的抽象部分和实现部分搭桥。

官方一点的说法叫:将抽象部分与它的实现部分分离,使它们都可以独立变化。

还有另外一种理解方式:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。

适用场景

  • 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以通过桥接模式使他们在抽象层建立一个关联关系;
  • 那些不希望使用继承或因为多层次继承导致系统类的个数极具增加的系统;
  • 一个类存在两个独立变化的维度,而这两个维度都需要进行扩展。

UML 类图

  • 抽象化角色 Abstraction:定义抽象的接口,包含一个对实现化角色的引用,抽象角色的方法需要调用实现化角色;
  • 扩展抽象化角色RefinedAbstraction:抽象化角色的子类,一般对抽象部分的方法进行完善和扩展,实现父类中的业务方法,并通过组合/聚合关系调用实现化角色中的业务方法
  • 实现化角色 Implementor:定义具体行为、具体特征的应用接口,供扩展抽象化角色使用,一般情况下是由实现化角色提供基本的操作,而抽象化角色定义基于实现部分基本操作的业务方法;
  • 具体实现化角色 ConcreteImplementor:完善实现化角色中定义的具体逻辑。

代码实现

实现化角色

 /*** @author lq* @PACKAGE_NAME: com.lq* @CLASS_NAME: Implementor* @date 2022/11/13 12:35* @Description:  实现化角色*/public interface Implementor {void operationImpl();}

具体实现化角色

 /*** @author lq* @PACKAGE_NAME: com.lq.bridge* @CLASS_NAME: ConcreteImplementorA* @date 2022/11/13 12:36* @Description: 具体实现化角色*/public class ConcreteImplementorA implements Implementor{@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorA");}}class ConcreteImplementorB implements Implementor{@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB");}}

抽象化角色

 /*** @author lq* @PACKAGE_NAME: com.lq.bridge* @CLASS_NAME: Abstraction* @date 2022/11/13 12:36* @Description:   抽象化角色 */public abstract class Abstraction {private Implementor implementor;public Abstraction(Implementor implementor) {this.implementor = implementor;}public void operation() {implementor.operationImpl();}}

扩展抽象化角色

 /*** @author lq* @PACKAGE_NAME: com.lq.bridge* @CLASS_NAME: RefinedAbstraction* @date 2022/11/13 12:37* @Description: 扩展抽象化角色*/public class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor implementor) {super(implementor);implementor.operationImpl();}}

测试

 /*** @author lq* @PACKAGE_NAME: com.lq.bridge* @CLASS_NAME: Main* @date 2022/11/13 12:38* @Description:*/public class Main {public static void main(String[] args) {Implementor concreteImplementorA = new ConcreteImplementorA();RefinedAbstraction refinedAbstraction=new RefinedAbstraction(concreteImplementorA);}}

输出:

 ConcreteImplementorA

Bridge (桥接模式)相关推荐

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

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

  2. 步步为营 .NET 设计模式学习笔记 十三、Bridge (桥接模式)

    概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引 ...

  3. Scala 与设计模式(六):Bridge 桥接模式

    相信大家都玩过「俄罗斯方块」吧. 小罗年幼时最喜欢玩的就是俄罗斯方块.作为一个有情怀的程序员,小罗决定尝试实现这款游戏. 玩过俄罗斯方块的人都会知道,俄罗斯方块由七种简单形状组成: I.J.L.O.S ...

  4. Bridge - 桥接模式

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而 ...

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

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而 ...

  6. [php]php设计模式 Bridge (桥接模式)

    1 <?php 2 /** 3 * 桥接模式 4 * 5 * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化 6 */ 7 abstractclass Implementor 8 { 9 ...

  7. Bridge 桥接模式

    定义 桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 这种模式涉及到一个作为桥接的接口,使得实体 ...

  8. 设计模式-结构型模式 -bridge 桥接模式

    桥接模式更注重:两个可变维度的拓展 不能用继承 容易造成类爆炸 四个角色:实现化 (定义接口方法 ) 具体实现化 implement实现化接口 并重写方法 抽象化 :聚合实现化接口 并初始化 重写方法 ...

  9. 6中结构型设计模式的对比理解(Composite组合模式,Proxy代理模式,Flyweight享元模式,Facade门面模式,Bridge桥接模式,Decorator装饰器模式)

    结构型模式 结构型模式用来组装 类和对象,以获得更大的结构. 结构型类模式,通过继承机制来组合接口或类.简单的例子就是多重继承,最后一个类拥有所有父类的性质.这个模式有助于独立开发一个协同类.另一个例 ...

  10. Java 设计模式之Bridge桥接模式

    将抽象和具体实现两个维度分离,让他们独立发展,并且在抽象类里聚合一个具体实现,通过聚合替代继承,用于解决类爆炸的问题. 这种模式要求对系统的抽象的理解和设计难度都比较大. 例子: 这里要对花,气球等装 ...

最新文章

  1. poj2438(哈密顿回路)
  2. 谈谈我理解的敏捷开发--转载
  3. 绩效工作流_流绩效–您的想法
  4. java 全排列 可重复_java 用递归方法求n个数的无重复全排列
  5. 计算机网络中使用最广泛的交换技术是什么,04741计算机网络原理试题及答案201604...
  6. anaconda安装好tensorflow后,无法在jupyter notebook上使用的解决方法
  7. chrome浏览器上传文件延迟_UEditor chrome 点击上传文件选择框会延迟几秒才会显示...
  8. JAVA集合Set之HashSet详解_Java基础———集合之HashSet详解
  9. Linux系统管理员应该知道的20个系统监控工具
  10. IMSIDesign.TurboCAD.Designer.v14
  11. tcpdf开发文档(中文翻译版)
  12. 世界各个地区WIFI 2.4G及5G信道一览表(附无线通信频率分配表)
  13. 在PPT中批量导入图片
  14. go 中 结构体 map互转
  15. 数据库三种概念模型——层次模型,网状模型,关系模型的优缺点总结
  16. vasp结构优化英语_活动 | 英语学院举办研究生招生线上宣讲会
  17. 浅谈“跨站跟踪攻击(即CST/XST攻击)”
  18. 前端通信:全双工,半双工,单工
  19. matlab计算 var,matlab 在险价值 VaR 的计算
  20. mac外置硬盘安装linux,Mac外置硬盘上安装Linux图文教程

热门文章

  1. 大学计算机平面设计教学实施报告,设计课程论文,关于高校平面设计课程CoreIDRAW图形设计的教学改革相关参考文献资料-免费论文范文...
  2. http加密解密流程
  3. 42-Jenkins-Active Choices插件实现级联参数
  4. Java Annotation手册
  5. leaflet加载wms和wfs服务
  6. 记住这两个方法,手机密码解锁不求人
  7. 群狼调研开展某市群众对卫生状况满意度调查
  8. One Day One Step 之Dual Palindromes
  9. Spring Boot使用支付宝支付
  10. php支付宝第三方授权,原生 PHP 实现支付宝 App 第三方登录获取用户信息,_PHP_ 少侠科技...