Python设计模式 - 桥接模式
定义
桥接模式是一种结构型设计模式,它的核心思想是将抽象部分与实现部分分离,使它们可以独立变化。
结构
- 抽象类(Abstraction):定义抽象接口,持有实现部分的引用。
- 具体抽象类(Refined Abstraction):扩展抽象接口。
- 实现类(Implementor):定义实现部分的接口,通常是一些基础操作。
- 具体实现类(Concrete Implementor):提供实现类接口的具体实现。
通常,抽象部分是面向高层业务逻辑的,而实现部分则关注底层细节。因此一般会将与业务方法关系更密切的维度设计为抽象部分。
应用场景
- 跨平台 GUI 组件:当 GUI 组件需要在多个操作系统上运行且渲染方式不同时,使用桥接模式解耦 UI 组件与平台渲染逻辑。
- 图形绘制引擎:当应用程序需要支持不同的图形绘制库(如 OpenGL、DirectX),使用桥接模式解耦图形形状与具体的绘制引擎。
优缺点
优点:
- 解耦抽象与实现,提高代码灵活性:使抽象部分和实现部分可以独立扩展,避免二者强耦合,提高系统的灵活性。
- 扩展性强,符合开闭原则:新增抽象部分或实现部分时,无需修改现有代码,只需添加新的具体抽象类或具体实现类即可,提高了系统的可扩展性,并且符合开闭原则。
- 减少子类数量:通过动态组合代替继承,降低类的数量,减少复杂度,提升可维护性。
缺点:
- 对客户端不够友好:客户端需要理解抽象部分与实现部分的组合方式,相比直接使用继承,增加了使用和理解的复杂度。
代码示例
from abc import ABC, abstractmethod# 实现部分:消息发送方式(短信、邮件)
class MessageSender(ABC):@abstractmethoddef send(self, message: str):passclass 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 # 通过组合方式使用消息发送方式@abstractmethoddef send(self, content: str):passclass 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("服务器异常,请立即检查!")
参考
《设计模式的艺术》