中介者模式(Mediator Pattern)是一种行为型设计模式,它用于降低多个对象之间的耦合度,通过引入一个中介者对象,将对象之间的交互转化为中介者和对象之间的交互,从而避免了对象之间的直接耦合。
在中介者模式中,有三个核心角色:Mediator(中介者)、Colleague(同事类)和ConcreteMediator(具体中介者)。Mediator(中介者)是抽象中介者,Colleague(同事类)是抽象同事类,ConcreteMediator(具体中介者)是具体中介者。
下面是一个简单的中介者模式Demo,假设有一个聊天室系统,它包含了多个用户,每个用户可以发送和接收消息:
# 中介者类
class ChatRoom:
def __init__(self):
self._users = []
def add_user(self, user):
self._users.append(user)
def send_message(self, message, sender):
for user in self._users:
if user != sender:
user.receive(message)
# 同事类
class User:
def __init__(self, name):
self._name = name
def send(self, message):
chat_room.send_message(message, self)
def receive(self, message):
print(f"{self._name} received message: {message}")
# 客户端代码
chat_room = ChatRoom()
alice = User("Alice")
bob = User("Bob")
charlie = User("Charlie")
chat_room.add_user(alice)
chat_room.add_user(bob)
chat_room.add_user(charlie)
alice.send("Hello, Bob and Charlie!")
bob.send("Hi, Alice!")
charlie.send("Nice to meet you, Alice and Bob!")
在这个Demo中,ChatRoom是中介者类,它维护了一个用户列表,并实现了发送消息的方法。User是同事类,它包含了发送和接收消息的方法。
当客户端使用中介者模式时,需要先定义一个中介者类和多个同事类。同事类可以向中介者发送消息,中介者收到消息后,可以将消息转发给其他同事类。
中介者模式的应用场景比较广泛,例如:
- GUI应用程序:GUI应用程序中,多个组件之间经常需要交互,可以使用中介者模式来降低组件之间的耦合度。
- 聊天室系统:聊天室系统中,多个用户之间需要发送和接收消息,可以使用中介者模式来协调用户之间的交互。
- 航空管制系统:航空管制系统中,多个飞机之间需要协调交通,可以使用中介者模式来降低飞机之间的耦合度。
补充一下,这个示例是Python代码,下面是一个相似的Java代码示例:
import java.util.*;
// 中介者类
class ChatRoom {
private final List<User> users = new ArrayList<>();
public void addUser(User user) {
users.add(user);
}
public void sendMessage(String message, User sender) {
for (User user : users) {
if (user != sender) {
user.receive(message);
}
}
}
}
// 同事类
class User {
private final String name;
public User(String name) {
this.name = name;
}
public void send(String message) {
chatRoom.sendMessage(message, this);
}
public void receive(String message) {
System.out.println(name + " received message: " + message);
}
}
// 客户端代码
ChatRoom chatRoom = new ChatRoom();
User alice = new User("Alice");
User bob = new User("Bob");
User charlie = new User("Charlie");
chatRoom.addUser(alice);
chatRoom.addUser(bob);
chatRoom.addUser(charlie);
alice.send("Hello, Bob and Charlie!");
bob.send("Hi, Alice!");
charlie.send("Nice to meet you, Alice and Bob!");
以下是一些学习中介者模式的推荐资源:
《Head First 设计模式》:这是一本通俗易懂的设计模式入门书籍,其中包含了对中介者模式的讲解和示例代码。
《设计模式:可复用面向对象软件的基础》:这是设计模式的经典著作之一,其中包含了对中介者模式的详细讲解和示例代码。
《图解设计模式:以UML为基础,学习23种设计模式》:这是一本以图解为主的设计模式入门书籍,其中包含了对中介者模式的详细讲解和示例代码。
中介者模式的Java实现:这是一个包含了中介者模式示例代码的Java项目,可以帮助读者更好地理解和应用中介者模式。
GitHub链接:https://github.com/iluwatar/java-design-patterns/tree/master/mediator ↗
总之,学习中介者模式需要结合书籍和实践,建议读者选择一些适合自己的入门书籍,同时结合实际项目中的设计问题进行实践,加深对中介者模式的理解和应用。