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

一、说明

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

(一) 解决问题

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

(二) 使用场景

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

二、结构

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

三、伪代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
桥接模式

例:将不同形状和颜色相互独立,自由组合。无需创建组合类
"""


class Shape:
    """形状基类"""

    def __init__(self, color):
        self._color = color

    def draw(self):
        pass


class Color:
    """颜色基类"""

    def paint(self):
        pass


class Square(Shape):
    """具体形状类"""

    def draw(self):
        return f"{self._color.paint()}的正方形"


class Circle(Shape):
    """具体形状类"""

    def draw(self):
        return f"{self._color.paint()}的圆"


class Triangle(Shape):
    """具体形状类"""

    def draw(self):
        return f"{self._color.paint()}的三角形"


class Red(Color):
    """具体颜色类"""

    def paint(self):
        return "红色"


class Blue(Color):
    """具体颜色类"""

    def paint(self):
        return "蓝色"


# 客户端代码
if __name__ == "__main__":
    """
    红色的圆
    红色的正方形
    蓝色的圆
    蓝色的正方形
    红色的三角形
    蓝色的三角形
    """
    print(Circle(Red()).draw())
    print(Square(Red()).draw())

    print(Circle(Blue()).draw())
    print(Square(Blue()).draw())

    # 若增加一个三角形,则只需要增加一个Triangle类
    print(Triangle(Red()).draw())
    print(Triangle(Blue()).draw())

四、优缺点

优点

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

缺点

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

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

相关推荐

  1. 设计模式

    2024-02-23 18:30:03       42 阅读
  2. 设计模式模式

    2024-02-23 18:30:03       54 阅读
  3. 设计模式——模式

    2024-02-23 18:30:03       56 阅读
  4. 设计模式-模式

    2024-02-23 18:30:03       58 阅读
  5. 设计模式-模式

    2024-02-23 18:30:03       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-23 18:30:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-23 18:30:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-23 18:30:03       87 阅读
  4. Python语言-面向对象

    2024-02-23 18:30:03       96 阅读

热门阅读

  1. uni-app中组件和样式的使用

    2024-02-23 18:30:03       45 阅读
  2. TypeScript基础知识点

    2024-02-23 18:30:03       44 阅读
  3. 超参数优化

    2024-02-23 18:30:03       35 阅读
  4. 【无标题】

    2024-02-23 18:30:03       49 阅读
  5. 第10章 搭建网盘服务

    2024-02-23 18:30:03       39 阅读
  6. Linux第64步_编译移植好的虚拟机文件

    2024-02-23 18:30:03       39 阅读
  7. npm install报错,解决记录

    2024-02-23 18:30:03       52 阅读
  8. vue+electron 修改默认安装目录

    2024-02-23 18:30:03       47 阅读
  9. 听课笔记03

    2024-02-23 18:30:03       48 阅读
  10. k8s中基于alpine的pod无法解析域名问题

    2024-02-23 18:30:03       52 阅读
  11. Visual Studio Code 实用快捷键

    2024-02-23 18:30:03       52 阅读
  12. 抖店注册个体还是个人?哪个比较适合新手?

    2024-02-23 18:30:03       44 阅读