Python设计模式 - 桥接模式

发布于:2025-07-24 ⋅ 阅读:(17) ⋅ 点赞:(0)

定义

桥接模式是一种结构型设计模式,它的核心思想是将抽象部分与实现部分分离,使它们可以独立变化。

结构

在这里插入图片描述

  • 抽象类(Abstraction):定义抽象接口,持有实现部分的引用。
  • 具体抽象类(Refined Abstraction):扩展抽象接口。
  • 实现类(Implementor):定义实现部分的接口,通常是一些基础操作。
  • 具体实现类(Concrete Implementor):提供实现类接口的具体实现。

通常,抽象部分是面向高层业务逻辑的,而实现部分则关注底层细节。因此一般会将与业务方法关系更密切的维度设计为抽象部分。

应用场景

  1. 跨平台 GUI 组件:当 GUI 组件需要在多个操作系统上运行且渲染方式不同时,使用桥接模式解耦 UI 组件与平台渲染逻辑。
  2. 图形绘制引擎:当应用程序需要支持不同的图形绘制库(如 OpenGL、DirectX),使用桥接模式解耦图形形状与具体的绘制引擎。

优缺点

优点:

  1. 解耦抽象与实现,提高代码灵活性:使抽象部分和实现部分可以独立扩展,避免二者强耦合,提高系统的灵活性。
  2. 扩展性强,符合开闭原则:新增抽象部分或实现部分时,无需修改现有代码,只需添加新的具体抽象类或具体实现类即可,提高了系统的可扩展性,并且符合开闭原则。
  3. 减少子类数量:通过动态组合代替继承,降低类的数量,减少复杂度,提升可维护性。

缺点:

  1. 对客户端不够友好:客户端需要理解抽象部分与实现部分的组合方式,相比直接使用继承,增加了使用和理解的复杂度。

代码示例

from abc import ABC, abstractmethod


# 实现部分:消息发送方式(短信、邮件)
class MessageSender(ABC):
    @abstractmethod
    def send(self, message: str):
        pass


class SMSMessageSender(MessageSender):
    def send(self, message: str):
        print(f"【短信发送】{message}")


class EmailMessageSender(MessageSender):
    def send(self, message: str):
        print(f"【邮件发送】{message}")


# 抽象部分:消息类型(普通消息、加急消息)
class Message(ABC):
    def __init__(self, sender: MessageSender):
        self.sender = sender  # 通过组合方式使用消息发送方式

    @abstractmethod
    def send(self, content: str):
        pass


class CommonMessage(Message):
    def send(self, content: str):
        print("【普通消息】处理中...")
        self.sender.send(content)


class UrgentMessage(Message):
    def send(self, content: str):
        print("【加急消息】需要立即处理!")
        self.sender.send(f"【加急】{content}")


# 客户端代码
if __name__ == "__main__":
    # 选择短信方式发送普通消息
    sms_sender = SMSMessageSender()
    common_msg = CommonMessage(sms_sender)
    common_msg.send("会议将在下午3点举行")

    # 选择邮件方式发送加急消息
    email_sender = EmailMessageSender()
    urgent_msg = UrgentMessage(email_sender)
    urgent_msg.send("服务器异常,请立即检查!")

参考

《设计模式的艺术》


网站公告

今日签到

点亮在社区的每一天
去签到