中介者模式包含以下主要角色:
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/设计模式