• 【Python笔记-设计模式】桥接模式


    一、说明

    桥接模式是一种结构型设计模式, 主要用于将抽象部分与它的实现部分分离, 从而能在开发时分别使用,使系统更加灵活,易于扩展。

    (一) 解决问题

    所有 组合类的数量将以几何级数增长
    1. 抽象和实现分离:桥接模式可以让抽象部分和实现部分独立变化,不会相互影响,提高了系统的灵活性和可维护性。
    2. 多维度变化:当一个类有多个变化维度,且这些变化维度都可以独立变化时,可以使用桥接模式来处理这种情况。
    3. 减少子类数量:通过桥接模式,可以减少子类的数量,避免类爆炸的问题。

    (二) 使用场景

    • 当一个类有多个变化维度,且这些变化维度都可以独立变化时
    • 当希望在多个对象间共享实现(如多个对象共享同一个实现类)时

    二、结构

    1. 抽象部分(Abstraction)提供高层控制逻辑,依赖于完成底层实际工作的实现对象。
    2. 实现部分(Implementation)为所有具体实现声明通用接口。抽象部分仅能通过在这里声明的方法与实现对象交互。抽象部分可以列出和实现部分一样的方法,但是抽象部分通常声明一些复杂行为,这些行为依赖于多种由实现部分声明的原语操作。
    3. 具体实现(Concrete Implementations)中包括特定于平台的代码。
    4. 精确抽象(Refined Abstraction)提供控制逻辑的变体。与其父类一样,它们通过通用实现接口与不同的实现进行交互。
    5. 通常情况下,客户端(Client)仅关心如何与抽象部分合作。但是,客户端需要将抽象对象与一个实现对象连接起来。

    三、伪代码

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. __doc__ = """
    4. 桥接模式
    5. 例:将不同形状和颜色相互独立,自由组合。无需创建组合类
    6. """
    7. class Shape:
    8. """形状基类"""
    9. def __init__(self, color):
    10. self._color = color
    11. def draw(self):
    12. pass
    13. class Color:
    14. """颜色基类"""
    15. def paint(self):
    16. pass
    17. class Square(Shape):
    18. """具体形状类"""
    19. def draw(self):
    20. return f"{self._color.paint()}的正方形"
    21. class Circle(Shape):
    22. """具体形状类"""
    23. def draw(self):
    24. return f"{self._color.paint()}的圆"
    25. class Triangle(Shape):
    26. """具体形状类"""
    27. def draw(self):
    28. return f"{self._color.paint()}的三角形"
    29. class Red(Color):
    30. """具体颜色类"""
    31. def paint(self):
    32. return "红色"
    33. class Blue(Color):
    34. """具体颜色类"""
    35. def paint(self):
    36. return "蓝色"
    37. # 客户端代码
    38. if __name__ == "__main__":
    39. """
    40. 红色的圆
    41. 红色的正方形
    42. 蓝色的圆
    43. 蓝色的正方形
    44. 红色的三角形
    45. 蓝色的三角形
    46. """
    47. print(Circle(Red()).draw())
    48. print(Square(Red()).draw())
    49. print(Circle(Blue()).draw())
    50. print(Square(Blue()).draw())
    51. # 若增加一个三角形,则只需要增加一个Triangle类
    52. print(Triangle(Red()).draw())
    53. print(Triangle(Blue()).draw())

    四、优缺点

    优点

    • 隐藏实现细节:桥接模式可以隐藏实现细节,对客户端透明,提高了系统的安全性
    • 开闭原则:你可以新增抽象部分和实现部分,且它们之间不会相互影响
    • 单一职责原则:抽象部分专注于处理高层逻辑,实现部分处理平台细节

    缺点

    • 增加代码复杂度:对于高聚合类使用桥接模式可能会让代码更加复杂

     跳转主页:【Python笔记】设计模式-CSDN博客

  • 相关阅读:
    R语言编写自定义函数对数据进行标准化、使用keras包构建深度学习自动编码器(autoencoder)、使用MSE指标评估自动编码器的效能(重构误差)
    【Oracle】回滚/闪回误差入数据
    【js&vue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript
    JVM中的堆和栈
    《简历宝典》09 - 简历中“教育背景”模块,我们来个实战演练
    关于 Oracle 中字段值为 NULL 时的排序顺序
    基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码
    小知识:使用errorstack定位特定问题
    【MySQL】数据库的存储过程与存储函数通关教程(完整版)
    linux异步IO通知
  • 原文地址:https://blog.csdn.net/weixin_44904331/article/details/136195422