当前位置: 首页 > news >正文

设计模式详解-桥接模式

类型:结构型模式

实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。

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

主要解决:类变化频繁时用继承可能会出现的类爆炸问题。

如何解决:减少类的耦合关系,让类独立变化。

应用实例: 汽车制造,抽象部分可以是车辆的基本属性和功能,而实现部分可以是具体型号的引擎,通过桥接模式,我们可以在不同型号的汽车上组合不同类型的引擎

优点: 1、优秀的解耦性 2、优秀的扩展性

缺点:会提高系统的设计与认知难度

使用场景:一个类存在多个独立变化的维度

关键角色

  • 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
  • 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
  • 实现(Implementor):定义实现接口,提供基本操作的接口。
  • 具体实现(Concrete Implementor):实现实现接口的具体类。

实现

步骤1:
首先,我们定义了一个接口 DrawAPI,其中包含了绘制圆形的方法 drawCircle。public interface DrawAPI {public void drawCircle(int radius, int x, int y);
}步骤 2:
然后,我们创建了两个实现了 DrawAPI 接口的具体桥接实现类:RedCircleGreenCircle。这两个类分别用于绘制红色和绿色的圆形。public class RedCircle implements DrawAPI {@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("Drawing Circle[ color: red, radius: "+ radius +", x: " +x+", "+ y +"]");}
}public class GreenCircle implements DrawAPI {@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("Drawing Circle[ color: green, radius: "+ radius +", x: " +x+", "+ y +"]");}
}步骤 3
我们创建了一个抽象类 Shape,其中包含一个成员变量 drawAPI,它的类型是 DrawAPI 接口。这个抽象类还有一个抽象方法 draw()public abstract class Shape {protected DrawAPI drawAPI;protected Shape(DrawAPI drawAPI){this.drawAPI = drawAPI;}public abstract void draw();
}步骤 4
最后,我们创建了一个实体类 Circle,它继承了 Shape 抽象类。Circle 类有自己的属性(x、y、radius)和一个带有参数的构造函数。在 draw() 方法中,它调用了 drawAPI 的 drawCircle 方法来绘制圆形。public class Circle extends Shape {private int x, y, radius;public Circle(int x, int y, int radius, DrawAPI drawAPI) {super(drawAPI);this.x = x;this.y = y;this.radius = radius;}public void draw() {drawAPI.drawCircle(radius,x,y);}
}
步骤 5BridgePatternDemo 类的 main 方法中,我们创建了一个红色的圆形和一个绿色的圆形,并通过调用 draw() 方法来绘制它们。这里的关键点是,我们可以通过传入不同的颜色类(即 RedCircleGreenCircle)来实现不同颜色的圆形绘制,而无需修改 ShapeCircle 类的代码。public class BridgePatternDemo {public static void main(String[] args) {Shape redCircle = new Circle(100,100, 10, new RedCircle());Shape greenCircle = new Circle(100,100, 10, new GreenCircle());redCircle.draw();greenCircle.draw();}
}

综上所述,桥接模式的作用是将抽象部分和实现部分解耦,使它们可以独立地变化。在这个例子中,我们通过桥接模式实现了不同颜色圆形的绘制,而且可以很方便地添加更多的颜色选项,同时保持代码的灵活性和可扩展性。

http://www.lryc.cn/news/131359.html

相关文章:

  • 设计模式—— 单一职责原则
  • 嵌入式系统中如何选择RTC电池?
  • 56 | 国内游戏直播竞品分析
  • STM32 CubeMX (第一步Freertos任务管理:创建、删除、挂起、恢复)
  • 0101读写分离测试-jdbc-shardingsphere-中间件
  • sqlite3将词典导入数据库
  • 浏览器 - 事件循环机制详解
  • 析构函数中不应该抛出异常(摘录)
  • Windows定时任务计划无法显示任务程序界面的问题解决
  • 【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求
  • Python学习笔记_进阶篇(二)_django知识(一)
  • 【hive】hive中row_number() rank() dense_rank()的用法
  • 【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署
  • 计算实数数组中所有元素的绝对值 numpy.fabs()
  • 深入浅出Pytorch函数——torch.nn.init.orthogonal_
  • ORACLE中UNION、UNION ALL、MINUS、INTERSECT学习
  • 【k8s、云原生】基于metrics-server弹性伸缩
  • 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)
  • VSCode快捷键
  • 贪心算法求数组中能组成三角形的最大周长
  • VMWare Workstation 17 Pro 网络设置 桥接模式 网络地址转换(NAT)模式 仅主机模式
  • 拒绝摆烂!C语言练习打卡第四天
  • KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17
  • 【学习笔记之java】使用RestTemplate调用第三方接口
  • 数据集成革新:去中心化微服务集群的无限潜能
  • 后端返回可下载的xlsx文件,但是前端接收下载后为乱码
  • 提升资源管理效率必备工具推荐
  • HJ23 删除字符串中出现次数最少的字符
  • 文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题
  • Leetcode - 滑动窗口