说到这个模式就有趣了,不知道大家在生活中喷到过中介没?其实中介这个词吧,我也说不上好还是坏,有时候他可以帮助人们更快的达到某个目的,但有的时候吧,这个有贼坑人,相信网络上有各种被中介坑的案例,但是今天我们讲的这个设计模式就是围绕中介来讲的,但是他并不是为了坑人的,在本文中的中介者模式主要是为了满足达到某个目的而进行的。
中介者模式:
它提供了一种集中式的方式来管理复杂对象之间的通信和交互。中介者模式通过引入一个中介者对象,将对象之间的通信转化为与中介者的通信,从而减少对象间的直接耦合。
中介者模式的核心组成部分包括:
中介者(Mediator):定义了对象之间通信的接口和规则,可以通过中介者来调度和协调对象之间的交互。
具体中介者(Concrete Mediator):实现了中介者接口,负责实际的对象协调和通信过程。
同事类(Colleague):定义了与其他同事类通信的接口,可以通过中介者来发送和接收消息。
具体同事类(Concrete Colleague):实现了同事类的接口,负责具体的行为和交互。
中介者模式的优点包括:
- 减少了对象间的直接耦合:通过引入中介者,对象之间的通信不再直接依赖于彼此,而是通过中介者来进行。
- **促进了对象的松耦合:**对象只需要与中介者进行通信,而不需要了解其他对象的细节,从而降低了对象之间的依赖。
- **简化了对象之间的交互:**中介者集中了对象间的交互逻辑,使得交互过程变得简单和可管理。
public class MediatorPatternDemo {
public static void main(String[] args) {
//同事对象
User robert = new User("Robert");
User john = new User("John");
//robert向john打招呼的信息通过 聊天室 ChatRoom 发出.
robert.sendMessage("Hi! John!");
john.sendMessage("Hello! Robert!");
}
}
/**
* 具体中介者(Concrete Mediator)角色
*/
public class ChatRoom {
//发送信息
public static void showMessage(User user, String message){
System.out.println(new Date().toString()
+ " [" + user.getName() +"] : " + message);
}
}
/**
* 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
*
* 当User之间要互相传递消息时,由 ChatRoom这个中介者来完成.
*/
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name){
this.name = name;
}
//****发信息
public void sendMessage(String message){
//调用中介者来发送.
ChatRoom.showMessage(this, message);
}
}
其缺点在于:
中介者的责任可能会变得复杂:随着对象之间的交互规则增加,中介者可能变得复杂且难以维护。
可能导致系统中心化:过度使用中介者模式可能导致系统中心化,使得中介者成为系统的瓶颈。
中介者模式,不应该在职责混乱的时候使用,否则这样会导致系统更加混乱。