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

Python 设计模式:桥接模式

1. 什么是桥接模式?

桥接模式是一种结构型设计模式,它通过将抽象部分与其实现部分分离,使得两者可以独立变化。桥接模式的核心思想是将抽象和实现解耦,从而提高系统的灵活性和可扩展性。

桥接模式的核心思想是将一个类的接口与其实现分离,使得两者可以独立变化。通过引入一个桥接接口,客户端可以通过这个接口来操作不同的实现,而不需要关心具体的实现细节。

桥接模式通常包含以下几个组成部分:

  • 抽象类(Abstraction):定义抽象部分的接口,并包含一个对实现部分的引用。
  • 扩展抽象类(Refined Abstraction):扩展抽象类,提供具体的实现。
  • 实现接口(Implementor):定义实现部分的接口。
  • 具体实现类(Concrete Implementor):实现实现接口,提供具体的实现。

桥接模式在软件设计中具有多种优点:

  • 解耦:将抽象部分与实现部分分离,使得两者可以独立变化,降低了系统的耦合度。
  • 灵活性:可以在运行时选择不同的实现,增强了系统的灵活性。
  • 可扩展性:可以通过扩展抽象类和实现类来增加新的功能,而不需要修改现有的代码。
# 实现接口
class DrawingAPI:def draw_circle(self, x, y, radius):pass# 具体实现类:API 1
class DrawingAPI1(DrawingAPI):def draw_circle(self, x, y, radius):print(f"API1: Drawing a circle at ({x}, {y}) with radius {radius} using a solid line.")# 具体实现类:API 2
class DrawingAPI2(DrawingAPI):def draw_circle(self, x, y, radius):print(f"API2: Drawing a circle at ({x}, {y}) with radius {radius} using a dashed line.")# 抽象类
class Shape:def draw(self):passdef resize(self, percentage):pass# 扩展抽象类:圆形
class Circle(Shape):def __init__(self, x, y, radius, drawing_api):self.x = xself.y = yself.radius = radiusself.drawing_api = drawing_apidef draw(self):self.drawing_api.draw_circle(self.x, self.y, self.radius)def resize(self, percentage):self.radius *= percentage# 客户端代码
if __name__ == "__main__":circle1 = Circle(5, 10, 3, DrawingAPI1())  # 使用 API 1circle1.draw()circle2 = Circle(5, 10, 3, DrawingAPI2())  # 使用 API 2circle2.draw()# 调整圆的大小并重新绘制circle1.resize(2)  # 增加半径circle1.draw()  # 使用 API 1 重新绘制
API1: Drawing a circle at (5, 10) with radius 3 using a solid line.
API2: Drawing a circle at (5, 10) with radius 3 using a dashed line.
API1: Drawing a circle at (5, 10) with radius 6 using a solid line.
  1. 实现接口DrawingAPI 类定义了实现部分的接口。

  2. 具体实现类

    • DrawingAPI1 类实现了 DrawingAPI 接口,提供了使用实线绘制圆形的实现。
    • DrawingAPI2 类实现了 DrawingAPI 接口,提供了使用虚线绘制圆形的实现。
  3. 抽象类和扩展抽象类Shape 类定义了抽象部分的接口,Circle 类实现了具体的圆形类,并包含对实现部分的引用。

  4. 客户端代码

    • 在客户端代码中,创建 Circle 对象并指定使用的绘制 API。
    • 调用 draw 方法绘制圆形,circle1 使用 DrawingAPI1,而 circle2 使用 DrawingAPI2,展示了不同的绘制方式。
http://www.xdnf.cn/news/80065.html

相关文章:

  • 电商虚拟户分账系统:破解电商资金管理难题的密钥
  • 数据安全,从治理体系开始认清全局
  • 【音视频】AAC-ADTS分析
  • transformer预测寿命
  • 【音视频】FFmpeg内存模型
  • 香港免费云服务器申请教程,配置4核8G
  • 【Maven】配置文件
  • 网络威胁情报 | Friday Overtime Trooper
  • VB.NET 2008影音播放器开发指南
  • 量子计算在密码学中的应用与挑战:重塑信息安全的未来
  • Git,本地上传项目到github
  • 超越GPT-4?下一代大模型的技术突破与挑战
  • OpenLDAP 管理 ELK 用户
  • 运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式
  • DeepSeek开源引爆AI Agent革命:应用生态迎来“安卓时刻”
  • 【Python】Selenium切换网页的标签页的写法(全!!!)
  • 力扣hot100 LeetCode 热题 100 Java 哈希篇
  • Spring之我见 - Spring MVC重要组件和基本流程
  • N8N 官方 MCP 节点实战指南:AI 驱动下的多工具协同应用场景全解析
  • 多台电脑切换解决方案:KVM 切换器
  • 小技巧1,在vue3中利用自定义ref实现防抖(customRef)
  • 晨控CK-FR12与欧姆龙NX系列PLC配置EtherNet/IP通讯连接操作手册
  • C++_并发编程_thread_01_基本应用
  • LoRA微调技术全景解析:大模型高效适配的革新之道
  • 【RuleUtil】适用于全业务场景的规则匹配快速开发工具
  • ffmpeg 硬解码相关知识
  • spark-SQL实验
  • 川翔云电脑32G大显存集群机器上线!
  • 进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
  • 考研单词笔记 2025.04.22