🌈个人主页: 程序员不想敲代码啊
🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家
👍点赞⭐评论⭐收藏
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!
中介者模式
中介者模式(Mediator Pattern)是一种设计模式,属于行为型模式。它用于减少多个对象之间的复杂交互,通过引入一个中介者对象来协调这些对象之间的通信。在这个模式中,各个对象不再直接交互,而是通过中介者进行通信,这样可以降低对象间的耦合性,使得系统更加灵活和可扩展。
中介者模式的结构
- 中介者接口(Mediator):定义一个接口,用于与各个同事对象进行通信。
- 具体中介者(ConcreteMediator):实现中介者接口,维护各个同事对象的引用,并协调它们之间的交互。
- 同事类(Colleague):定义一个与中介者的交互接口。具体同事类通过中介者与其他同事进行通信。
中介者模式的优势
- 降低耦合度:同事类之间不需要直接引用彼此,相互之间的关系通过中介者进行管理,从而降低了系统的复杂度。
- 集中管理:协议和流程在中介者中管理,使得系统更易于维护和修改。
- 提升可扩展性:通过增加新的同事类或中介者,可以轻松扩展系统的功能。
中介者模式的示例代码
以下是一个简单示例,描述了一个用于控制用户之间聊天的中介者模式。
java
// 中介者接口
interface ChatMediator {
void sendMessage(String message, User user);
void addUser(User user);
}
// 具体中介者
class ChatMediatorImpl implements ChatMediator {
private List<User> users;
public ChatMediatorImpl() {
this.users = new ArrayList<>();
}
@Override
public void sendMessage(String message, User user) {
for (User u : users) {
// 不发给发送者自己
if (u != user) {
u.receive(message);
}
}
}
@Override
public void addUser(User user) {
users.add(user);
}
}
// 同事类
abstract class User {
protected ChatMediator mediator;
protected String name;
public User(ChatMediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
public abstract void send(String message);
public abstract void receive(String message);
}
// 具体同事类
class UserImpl extends User {
public UserImpl(ChatMediator mediator, String name) {
super(mediator, name);
}
@Override
public void send(String message) {
System.out.println(this.name + ": Sending Message = " + message);
mediator.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println(this.name + ": Received Message = " + message);
}
}
// 测试中介者模式
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatMediator mediator = new ChatMediatorImpl();
User user1 = new UserImpl(mediator, "Alice");
User user2 = new UserImpl(mediator, "Bob");
User user3 = new UserImpl(mediator, "Charlie");
mediator.addUser(user1);
mediator.addUser(user2);
mediator.addUser(user3);
user1.send("Hi All!");
user2.send("Hello!");
}
}
运行结果
在这个例子中,我们创建了一个聊天中介者ChatMediatorImpl
,它管理多个用户(同事类)。用户通过调用send
方法发送消息,而消息会通过中介者分发给其他用户。运行代码会显示发送和接收消息的情况。
适用场景
中介者模式适用于以下场景:
- 有多个对象之间存在复杂的交互关系。
- 希望通过中央控制器来简化对象的交互。
- 需要解耦对象之间的依赖关系。
通过使用中介者模式,可以使系统更易于维护和扩展,同时保持代码的整洁和可读性。
创作不易,如果本篇博客对您有一定的帮助,大家记得关注+留言+点赞哦。