中介者模式
(Mediator Pattern),也称为仲裁者模式,定义了一个中介对象
,用以封装一系列对象之间的交互
。中介者使各个对象不需要显示地相互引用
,从而使耦合度降低
,而且可以独立地改变它们之间的交互。
具体组成
中介者
(Mediator):定义了同事对象如何与其进行通信的接口。
具体中介者
(ConcreteMediator):实现了中介者接口,通过具体同事类的对象来改进各同事之间的交互。
同事类
(Colleague):定义了中介者模式中各个对象的接口,这些对象不直接交互,而是通过中介者对象来进行。
具体同事类
(ConcreteColleague):每一个具体同事类都实现了在同事类中定义的接口,并且它们都持有一个中介者对象的引用。
优点
减少了对象之间的依赖,每个对象不需要知道其他对象的实现细节。
通过中介者对象可以方便地进行整个系统的协调。
缺点
当系统中对象很多时,中介者对象可能会变得非常复杂。
适用场景
当一个系统由许多对象组成,而这些对象之间的交互非常频繁时。
当对象之间的交互变得非常复杂时,使用中介者模式可以简化对象之间的交互。
示例
:设置一个聊天室系统,用户之间的消息传递通过一个聊天室中介者进行。
java
// 中介者接口
interface Mediator {
void sendMessage(String message, User user);
}
// 具体中介者
class ChatRoom implements Mediator {
public void sendMessage(String message, User user) {
System.out.println("From " + user.getName() + " to all: " + message);
}
}
// 同事类接口
abstract class User {
protected String name;
protected Mediator mediator;
public User(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
public abstract void receiveMessage(String message);
}
// 具体同事类
class ConcreteUser extends User {
public ConcreteUser(String name, Mediator mediator) {
super(name, mediator);
}
public void receiveMessage(String message) {
System.out.println("To " + name + " " + message);
}
public void sendMessage(String message) {
mediator.sendMessage(message, this);
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Mediator mediator = new ChatRoom();
User user1 = new ConcreteUser("User1", mediator);
User user2 = new ConcreteUser("User2", mediator);
((ConcreteUser) user1).sendMessage("Hello, User2!");
((ConcreteUser) user2).sendMessage("Hi, User1!");
}
}