目录
什么是中介模式
中介模式的组成
使用场景:
优点:
缺点:
Java 示例代码:
什么是中介模式
Java 中的中介模式(Mediator Pattern)是一种行为型设计模式,旨在降低多个对象和类之间的通信复杂性。通过这种模式,对象之间不直接通信,而是通过一个中介对象来协调他们之间的交互。这有助于减少系统中组件的相互依赖性,从而提高组件的可重用性和可维护性。
中介模式的组成
- 中介者接口(Mediator):定义了用于通信的方法,可以是接口或抽象类。
- 具体中介者(Concrete Mediator):实现中介者接口,并协调多个不同组件之间的交互。具体中介者知道所有的具体同事类,并从具体同事接收消息,向它们发送命令。
- 同事类(Colleague):与其他对象交互时,不是直接通信,而是通过中介者来交互。
使用场景:
- 当多个类相互交互形成网状结构时,使用中介模式可以将网状结构转化为以中介者为核心的星型结构。
- 减少类之间的依赖,降低耦合度。
- 当一个对象群的行为是互相协作的紧密型群体时,可以通过中介者封装这些交互。
优点:
- 减少了类间的直接通讯,降低了系统的复杂性。
- 有助于单一职责原则,可以将交互的管理和协调职责委托给中介者对象。
- 更容易理解和维护系统中的交互。
缺点:
- 中介者可能会变得过于复杂,自身成为一个难以维护的大类。
- 有可能过度使用,使得一些本可以直接通信的类也通过中介者来通信,可能引入不必要的复杂性。
Java 示例代码:
这里是一个简单的中介者模式实现的例子,展示如何在聊天室中使用中介者模式来交流:
// 中介者接口
interface ChatMediator {void sendMessage(String msg, User user);void addUser(User user);
}// 具体中介者
class ChatRoom implements ChatMediator {private List<User> users;public ChatRoom(){this.users = new ArrayList<>();}@Overridepublic void sendMessage(String msg, User user) {for(User u : users){// 不发送消息给自己if(u != user){u.receive(msg);}}}@Overridepublic void addUser(User user) {this.users.add(user);}
}// 同事类
abstract class User {protected ChatMediator mediator;protected String name;public User(ChatMediator med, String name){this.mediator = med;this.name = name;}public abstract void send(String msg);public abstract void receive(String msg);
}// 具体同事类
class ConcreteUser extends User {public ConcreteUser(ChatMediator med, String name) {super(med, name);}@Overridepublic void send(String msg) {System.out.println(this.name + ": Sending Message = " + msg);mediator.sendMessage(msg, this);}@Overridepublic void receive(String msg) {System.out.println(this.name + ": Received Message = " + msg);}
}public class Main {public static void main(String[] args) {ChatMediator mediator = new ChatRoom();User user1 = new ConcreteUser(mediator, "John");User user2 = new ConcreteUser(mediator, "Doe");mediator.addUser(user1);mediator.addUser(user2);user1.send("Hi there!");user2.send("Hello!");}
}
在这个示例中,ChatRoom
充当中介者,User
和其子类 ConcreteUser
充当同事类。通过中介者,同事类之间能够交换消息,而无需直接互相引用。
非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~