本文主要是介绍设计模式- 中介者模式(Mediator Pattern)结构|原理|优缺点|场景|示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设计模式(分类) 设计模式(六大原则)
创建型(5种) 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式
结构型(7种) 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式
行为型(11种) 策略模式 模板方法模式 观察者模式 迭代器模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式
中介者模式(Mediator Pattern)是一种行为设计模式,它通过引入一个中介者对象来封装多个对象之间复杂的交互关系,使对象之间不必相互引用,从而减少对象间的耦合。中介者使各个对象不需要显式地相互引用,而是通过中介者进行间接通信,从而降低系统的复杂性和提高可维护性。
结构: 中介者模式的主要组成部分包括:
- Mediator(中介者):定义一个接口,用于同事对象之间的通信。具体中介者通过实现该接口,来协调各同事对象的行为。
- Colleague(同事类):每个同事类都了解中介者,并且通过中介者与其他同事通信,而不是直接与其他同事通信。每个同事类都维持一个对中介者的引用。
- ConcreteMediator(具体中介者):具体中介者实现中介者接口,它通常会持有多个同事对象的引用,用于协调和管理同事之间的交互。
原理:
- 同事对象不再直接相互引用,而是将交互请求发送给中介者。
- 中介者接收到请求后,根据请求内容和当前状态,决定如何响应或转发请求给适当的同事对象。
- 通过中介者,可以集中管理对象间的交互,降低了对象间的耦合度,使得系统易于扩展和维护。
优缺点:
优点:
- 减少了类间直接耦合,使得对象易于复用和维护。
- 中央控制,使得复杂系统中的对象交互更加清晰和灵活。
- 方便添加新的交互方式或同事类,符合开闭原则。
缺点:
- 中介者集中了控制权,一旦中介者出现问题,可能会影响整个系统。
- 随着同事类的增多,中介者可能会变得复杂和难以管理。
应用场景:
- 当一个系统中对象之间的交互非常多且复杂,导致难以理解各个对象的职责时。
- 需要控制和协调多个对象间交互,避免对象间的紧耦合时。
- 在图形用户界面(GUI)开发中,协调多个组件之间的交互。
代码示例(以Java为例)
// 抽象中介者
interface ChatRoom {void sendMessage(String message, User user);
}// 具体中介者:聊天室
class ConcreteChatRoom implements ChatRoom {@Overridepublic void sendMessage(String message, User user) {for (User u : users) {if (!u.equals(user)) {u.receive(message);}}}// 管理用户列表private List<User> users = new ArrayList<>();public void addUser(User user) {users.add(user);}
}// 抽象同事类
abstract class User {protected String name;protected ChatRoom chatRoom;public User(String name, ChatRoom chatRoom) {this.name = name;this.chatRoom = chatRoom;}abstract void receive(String message);
}// 具体同事类:用户
class ConcreteUser extends User {public ConcreteUser(String name, ChatRoom chatRoom) {super(name, chatRoom);}@Overridevoid receive(String message) {System.out.println(name + " received: " + message);}public void sendMessage(String message) {chatRoom.sendMessage(message, this);}
}// 示例使用
public class MediatorPatternDemo {public static void main(String[] args) {ChatRoom chatRoom = new ConcreteChatRoom();User alice = new ConcreteUser("Alice", chatRoom);User bob = new ConcreteUser("Bob", chatRoom);chatRoom.addUser(alice);chatRoom.addUser(bob);alice.sendMessage("Hello, Bob!");bob.sendMessage("Hi, Alice!");}
}
在这个例子中,ChatRoom
作为中介者,管理着用户(User
)之间的消息发送。用户之间并不直接通信,而是通过调用聊天室的sendMessage
方法来间接通信。这样,即使增加新的用户或改变消息传播逻辑,也只需修改ChatRoom
类,而无需修改用户类,符合中介者模式的设计思想。
这篇关于设计模式- 中介者模式(Mediator Pattern)结构|原理|优缺点|场景|示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!