【Python设计模式23】中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它定义了一个对象(中介者)来封装对象之间的交互。中介者通过调度其他对象之间的通信,避免对象之间的直接引用,从而使得对象之间的耦合松散。中介者模式使得对象之间的交互变得更加灵活和可维护。

中介者模式的结构

中介者模式主要包括以下几个角色:

  1. 中介者接口(Mediator):定义与同事对象(Colleague)通信的接口。
  2. 具体中介者(ConcreteMediator):实现中介者接口,协调各个同事对象之间的交互。
  3. 同事对象(Colleague):各个参与交互的对象,持有对中介者对象的引用,通过中介者与其他同事对象通信。

中介者模式的示例

假设我们有一个聊天室系统,不同的用户通过聊天室发送消息。我们可以使用中介者模式来实现这一需求。

定义中介者接口
from abc import ABC, abstractmethod

class Mediator(ABC):
    @abstractmethod
    def send_message(self, message: str, colleague):
        pass
定义具体中介者
class ChatRoomMediator(Mediator):
    def __init__(self):
        self.colleagues = []

    def add_colleague(self, colleague):
        self.colleagues.append(colleague)

    def send_message(self, message: str, sender):
        for colleague in self.colleagues:
            if colleague != sender:
                colleague.receive_message(message)
定义同事对象
class Colleague(ABC):
    def __init__(self, mediator: Mediator, name: str):
        self.mediator = mediator
        self.name = name

    @abstractmethod
    def send_message(self, message: str):
        pass

    @abstractmethod
    def receive_message(self, message: str):
        pass

class User(Colleague):
    def send_message(self, message: str):
        print(f"{self.name} sends: {message}")
        self.mediator.send_message(message, self)

    def receive_message(self, message: str):
        print(f"{self.name} receives: {message}")
使用中介者模式
def main():
    mediator = ChatRoomMediator()

    user1 = User(mediator, "User1")
    user2 = User(mediator, "User2")
    user3 = User(mediator, "User3")

    mediator.add_colleague(user1)
    mediator.add_colleague(user2)
    mediator.add_colleague(user3)

    user1.send_message("Hello everyone!")
    user2.send_message("Hi User1!")
    user3.send_message("Hey!")

if __name__ == "__main__":
    main()

在这个示例中,Mediator是中介者接口,定义了发送消息的方法。ChatRoomMediator是具体中介者,实现了中介者接口,负责协调用户之间的消息传递。Colleague是同事对象的抽象类,定义了发送和接收消息的方法。User是具体同事对象,实现了发送和接收消息的方法。客户端通过创建中介者和用户对象,使用中介者模式实现聊天室的消息传递。

中介者模式的优缺点

优点
  1. 降低耦合:中介者模式通过引入中介者对象,使同事对象之间不再直接引用,降低了对象之间的耦合。
  2. 提高灵活性:中介者模式使得对象之间的交互变得更加灵活,可以动态地改变对象之间的交互方式。
  3. 集中控制交互:中介者对象集中控制对象之间的交互,使得对象之间的交互逻辑更加清晰和可维护。
缺点
  1. 中介者复杂性增加:随着同事对象之间交互的增加,中介者对象可能会变得复杂,难以维护。
  2. 可能产生性能瓶颈:由于中介者集中管理所有交互,可能会成为系统的性能瓶颈。

中介者模式的适用场景

  1. 复杂对象交互:当系统中对象之间的交互复杂且难以维护时,可以使用中介者模式。
  2. 减少类间依赖:当需要减少类之间的依赖关系,降低耦合度时,可以使用中介者模式。
  3. 动态改变交互:当需要在运行时动态改变对象之间的交互方式时,可以使用中介者模式。

总结

中介者模式是一种行为型设计模式,通过定义一个中介者对象来封装对象之间的交互,避免对象之间的直接引用,从而降低对象之间的耦合。中介者模式适用于复杂对象交互、减少类间依赖和动态改变交互的场景。合理应用中介者模式,可以提高系统的灵活性和可维护性。理解并掌握中介者模式,有助于在实际开发中构建高效、灵活的系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值