中介者模式
什么是中介者模式
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
- 中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行
为,而又不想生成太多的子类的场合。”
通过示例了解中介者模式
中介者模式(Mediator Pattern)是一种行为设计模式,它定义了一个用于封装一系列对象相互作用的对象。这种模式使得对象之间的交互更加松散,降低了耦合性。以下是一个简单的Java中介者模式示例,模拟一个聊天室中的用户和消息发送:
抽象中介者:ChatRoom
public abstract class ChatRoom {
public abstract void sendMessage(User sender, String message);
}
具体中介者:ConcreteChatRoom
public class ConcreteChatRoom extends ChatRoom {
private Map<String, User> users = new HashMap<>();
public void addUser(User user) {
users.put(user.getName(), user);
}
@Override
public void sendMessage(User sender, String message) {
System.out.println(sender.getName() + ": " + message);
for (User user : users.values()) {
if (!user.getName().equals(sender.getName())) {
user.receiveMessage(sender, message);
}
}
}
}
抽象同事类:User
public abstract class User {
protected String name;
public User(String name) {
this.name = name;
}
public abstract void sendMessage(ChatRoom chatRoom, String message);
public abstract void receiveMessage(User sender, String message);
}
具体同事类:ConcreteUser
public class ConcreteUser extends User {
public ConcreteUser(String name) {
super(name);
}
@Override
public void sendMessage(ChatRoom chatRoom, String message) {
chatRoom.sendMessage(this, message);
}
@Override
public void receiveMessage(User sender, String message) {
System.out.println("Received message from " + sender.getName() + ": " + message);
}
}
主程序
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatRoom chatRoom = new ConcreteChatRoom();
User user1 = new ConcreteUser("Alice");
User user2 = new ConcreteUser("Bob");
chatRoom.addUser(user1);
chatRoom.addUser(user2);
user1.sendMessage(chatRoom, "Hello, Bob!");
user2.sendMessage(chatRoom, "Hi, Alice!");
// 输出:
// Alice: Hello, Bob!
// Received message from Alice: Hello, Bob!
// Bob: Hi, Alice!
// Received message from Bob: Hi, Alice!
}
}
- ChatRoom是抽象中介者,定义了发送消息的方法。
- ConcreteChatRoom是具体中介者,实现了ChatRoom接口,负责将消息广播给所有在线用户。
- User是抽象同事类,定义了发送和接收消息的方法。
- ConcreteUser是具体同事类,实现了User接口,通过调用中介者的方法来发送消息,并在收到消息时触发receiveMessage方法。
- main方法创建了一个聊天室和两个用户,并模拟了他们之间的通信
通过中介者模式,我们解除了用户对象之间的直接依赖关系,使得用户对象只需与中介者交互,降低了系统的耦合度。