当前位置: 首页 >  网技达人 >  【桥接设计模式详解】Java/JS/Go/Python/TS不同语言实现

【桥接设计模式详解】Java/JS/Go/Python/TS不同语言实现

导读:【桥接设计模式详解】Java/JS/Go/Python/TS不同语言实现.简介.桥接模式(Bridge.Pattern)是一种结构型设计模式,它将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,来实现二者的解耦。参与桥接的接口是稳定的,用户可以扩展和修改桥接中的类

【桥接设计模式详解】Java/JS/Go/Python/TS不同语言实现

简介

桥接模式(Bridge Pattern)是一种结构型设计模式,它将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,来实现二者的解耦。参与桥接的接口是稳定的,用户可以扩展和修改桥接中的类,但是不能改变接口。桥接模式通过接口继承实现或者类继承实现功能扩展。

如果你希望在几个独立维度上扩展一个类,或者你想要拆分、重组一个具有多重功能的复杂类(例如能与多个数据库服务器进行交互的类),或者你想在运行时切换不同的实现方法,可以使用桥接模式。

作用

  1. 在有多种可能会变化的情况下,用继承扩展起来不灵活,桥接可以解决类似问题。
  2. 桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

实现步骤

  1. 定义一个工具接口,供不同工具类来实现。
  2. 建立多个具体工具类实现基础工具接口,这些工具是负责具体能力实现。
  3. 定义一个基础抽象类,里面聚合了工具接口,相当于桥接器。
  4. 建立具体对象类,继承自基础抽象类,调用工具类里的方法来实现具体功能。

UML

代码

基础抽象类

// AbstractShape.java 定义抽象桥接器,关联图形操作接口
public abstract class AbstractShape {s
   protected DrawTool drawTool;

   protected AbstractShape(DrawTool drawTool) {
      this.drawTool = drawTool;
   }

   public abstract void draw(int x, int y, int radius);
}

具体桥接器实现类

// RefinedShape.java 具体桥接类,继承抽象桥接类,扩充了自己的方法
public class RefinedShape extends AbstractShape {
   public RefinedShape(DrawTool drawTool) {
      super(drawTool);
   }

  @Override
  public void draw(int x, int y, int radius) {
      System.out.println(String.format("RefinedShape::draw() [x=%s y=%s radius=%s]", x, y, radius));
      // 通过工具类实际绘制
      drawTool.drawStyle();
  }

   // 新增的方法,可作为工具类的补充
   public void drawDone() {
      System.out.println("RefinedShape::drawDone(), 执行的drawTool是: " + drawTool.getClass().getSimpleName());
   }
}

定义工具接口类

// DrawTool.java 图形操作基础接口
public interface DrawTool {
  public void drawStyle();
}

定义工具实现类,可以多个

```java
// DrawStyleA.java 画圆A,实现了图画基础API
public class DrawStyeA implements DrawTool {
   @Override
   public void drawStyle() {
      System.out.println("DrawStyleA:drawStyle()");
   }
}
```

```java
// 画圆B,实现了图画基础API
public class DrawStyleB implements DrawTool {
   @Override
   public void drawStyle() {
      System.out.println("DrawStyleB:drawStyle()");
   }
}

测试调用

    /**
     * 桥接模式是将基础抽象类作为桥接器,用来连接业务对象和具体动作,将两者充分解耦。
     * 具体对象以抽象对象为父类,实现父类方法。
     * 具体工具类实现统一的工具接口,为抽象桥接对象服务
     * 使用时,声明具体对象同时传入具体工具,使得具体对象可以使用具体工具的动作。
     */

    // 用抽象类来声明具体对象,并指定具体工具
    AbstractShape shape = new RefinedShape(new DrawStyeA());
    // 调用对象的方法,里面执行了工具类的方法
    shape.draw(10, 20, 50);
    RefinedShape shape1 = (RefinedShape) shape;
    // 类型强转为具体业务类,调用具体类的方法
    shape1.drawDone();

    // /*********************** 分割线 ******************************************/

    // 直接用具体类来声明对象,并指定另外的工具
    RefinedShape shape2 = new RefinedShape(new DrawStyleB());
    // 调用对象的方法,里面执行了工具类的方法
    shape2.draw(11, 22, 33);
    shape2.drawDone();

更多语言版本

不同语言实现设计模式代码大全,不断更新中,敬请关注:

https://github.com/microwind/design-pattern

内容
  • 语音平台源码搭建开发之表情功能的实现
    语音平台源码搭建开发之表情功能的
    2023-12-10
    从飞鸽传书到网络聊天时代,人与人之间聊天方式有了极大地改变,也让不管是远在天边,还是近在眼前的朋友或家人,都能实现相当于
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • OpenGL实现GPU体渲染
    OpenGL实现GPU体渲染
    2023-12-07
    之前完成了利用OpenGL实现GPU体渲染的实验,现在把完成的工作做一个总结。.本实验demo的完成主要参考了《Open
  • 【Unity3D】基于粒子系统实现烟花特效
    【Unity3D】基于粒子系统实
    2023-12-07
    1 需求实现.​ 粒子系统ParticleSystem.中介绍了粒子初始化、粒子发射、发射器形状、渲染器、碰撞、子发射器
  • 4.10 x64dbg 反汇编功能的封装
    4.10 x64dbg 反汇编功
    2023-12-06
    LyScript.插件提供的反汇编系列函数虽然能够实现基本的反汇编功能,但在实际使用中,可能会遇到一些更为复杂的需求,此
  • 小波去噪算法的简易实现及其扩展(小波锐化、高斯拉普拉斯金字塔去噪及锐化)之二。
    

SSE图像算法优化系列九:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)
    小波去噪算法的简易实现及其扩展(
    2023-12-06
    上一篇文章谈及了GIMP里实现的小波分解,但是这仅仅是把图像分解为多层的数据,如果快速的获取分解数据以及后续怎么利用这些
  • 自主三维GIS引擎笔记-实现三维球045
    自主三维GIS引擎笔记-实现三维
    2023-12-05
    最小GIS迷你地球实现(实现一套最小的三维GIS球体) V1.0.0.0版本.数据加代码比较大(主要是数据,数据有1G多
  • 【短道速滑十一】标准的Gabor滤波器及Log_Gabor滤波器的实现、解析、速度优化及其和Halcon中gen_gabor的比较。
    【短道速滑十一】标准的Gabor
    2023-12-05
    最近有朋友在研究Halcon中gen_gabor的函数,和我探讨,因为我之前也没有怎么去关注这个函数,因此,前前后后大概
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • 驱动开发:内核RIP劫持实现DLL注入
    驱动开发:内核RIP劫持实现DL
    2023-12-01
    本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远
  • 驱动开发:摘除InlineHook内核钩子
    驱动开发:摘除InlineHoo
    2023-12-01
    在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于
  • 1.7 完善自定位ShellCode后门
    1.7 完善自定位ShellCo
    2023-12-01
    在之前的文章中,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定
  • 驱动开发:内核远程线程实现DLL注入
    驱动开发:内核远程线程实现DLL
    2023-12-01
    在笔者上一篇文章《内核RIP劫持实现DLL注入》介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探
  • 牛仔裤
    牛仔裤
    2024-01-05
    牛仔裤.牛仔裤,是一种起源于美国的经典服装单品,以其耐穿耐磨的特性,成为了时尚界不可或缺的一部分。无论是男女老少,都能在
  • 儿童T恤
    儿童T恤
    2023-12-26
    儿童T恤.儿童T恤是一种专门为儿童设计的上衣,具有舒适、时尚、环保等特点,是孩子们*常穿着的必备单品。.产品功能.儿童T
  • 婴儿连体衣
    婴儿连体衣
    2023-12-21
    婴儿连体衣.产品描述.婴儿连体衣是专门为婴儿设计的一款便捷舒适的睡衣,它将上衣和裤子融为一体,令宝宝在睡觉及活动时更加方
  • 外套
    外套
    2023-12-06
    外套.外套是一种经典的服装单品,不仅给人温暖的保护,还可以提升整体的时尚感。我们的外套采用高品质的材料和工艺**而成,既
  • 皮鞋
    皮鞋
    2024-01-15
    皮鞋.产品介绍.我们的皮鞋是经过精心设计和**的高品质鞋类产品。采用优质皮革和精湛工艺,为您提供舒适的穿着体验和时尚的外
  • 女童连衣裙
    女童连衣裙
    2024-01-15
    女童连衣裙.产品功能.高品质面料:选用优质的面料,柔软舒适,给孩子最佳的穿着体验.精美设计:精致的工艺和设计,展现孩子的
  • 儿童外套
    儿童外套
    2023-12-06
    儿童外套.产品功能.我们的儿童外套具有多种功能,包括保暖、防风、防水和舒适。它们采用高质量的面料制成,能够有效地抵御寒冷
  • 休闲鞋
    休闲鞋
    2024-01-05
    休闲鞋 - 轻松舒适的时尚选择.产品功能.休闲鞋 是一款适合各种活动的多功能鞋,其设计灵感来源于慢生活和自由精神。采用轻
  • 裤子
    裤子
    2023-12-26
    时尚新品发布:舒适时尚的裤子.产品功能.高品质的面料:采用柔软舒适的面料,透气性好,穿着舒适,不易起皱,易于护理。.人性
  • 儿童运动服
    儿童运动服
    2023-12-16
    儿童运动服.产品功能.我们的儿童运动服采用高品质的面料和工艺制作而成,具有出色的透气性和舒适性,可以让孩子在运动中保持干