中介者模式(Mediator Pattern)是一种行为型设计模式,它定义了一个对象,该对象封装了一组对象的交互方式,使得这些对象不需要直接相互通信,而是通过中介者进行通信。中介者模式的目的是降低对象之间的耦合度,使得系统更易于维护和扩展。

中介者模式包含以下主要角色:

1. 中介者(Mediator): 定义了对象之间的交互接口,负责协调对象的行为。通常包含 colleague_changed 等方法,用于处理对象之间的通信。

2. 具体中介者(Concrete Mediator): 实现了中介者接口,负责实际协调对象之间的交互。

3. 同事类(Colleague): 定义了对象的接口,包含一个指向中介者的引用。同事对象通过中介者来通信。

4. 具体同事类(Concrete Colleague): 实现了同事接口,负责实际的业务逻辑,并通过中介者来与其他同事对象通信。

下面是一个简单的中介者模式的例子,假设我们有一个聊天室应用,其中包含多个用户,用户之间通过中介者(聊天室)进行消息的发送和接收:
# 中介者接口
class Mediator:
    def send_message(self, message, colleague):
        pass

# 具体中介者类:聊天室
class ChatRoomMediator(Mediator):
    def send_message(self, message, colleague):
        print(f"{colleague.name}: {message}")

# 同事接口
class Colleague:
    def __init__(self, name, mediator):
        self.name = name
        self._mediator = mediator

    def send_message(self, message):
        self._mediator.send_message(message, self)

# 具体同事类:用户
class UserColleague(Colleague):
    def __init__(self, name, mediator):
        super().__init__(name, mediator)

    def send_message(self, message):
        print(f"{self.name} sends message: {message}")
        self._mediator.send_message(message, self)

# 客户端代码
if __name__ == "__main__":
    # 创建中介者
    chat_room = ChatRoomMediator()

    # 创建用户
    user1 = UserColleague("User1", chat_room)
    user2 = UserColleague("User2", chat_room)
    user3 = UserColleague("User3", chat_room)

    # 用户发送消息
    user1.send_message("Hello, everyone!")
    user2.send_message("Hi there!")
    user3.send_message("Nice to meet you!")

在上述示例中,Mediator 是中介者接口,ChatRoomMediator 是具体中介者类。Colleague 是同事接口,UserColleague 是具体同事类。每个用户对象通过中介者(聊天室)来发送和接收消息。

中介者模式的优点在于它将对象之间的通信集中在一个对象(中介者)中,减少了对象之间的直接耦合。这使得系统更易于维护和扩展,同时也使得对象之间的关系更加清晰。中介者模式特别适用于系统中对象之间的交互较为复杂的场景。


转载请注明出处:http://www.zyzy.cn/article/detail/11855/设计模式