Java计划模式之中介者模式

[复制链接]
发表于 2026-2-8 22:33:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Java计划模式之中介者模式

在软件计划中,随着体系的复杂性增长,对象之间的交互也变得更加繁琐和难以管理。中介者模式(Mediator Pattern)是一种运动型计划模式,旨在淘汰对象之间的耦合性,使它们通过一个中介者对象来举行交互,而不是相互引用。本文将深入探究中介者模式的概念、实现方式以及其在实际开发中的应用。
一、中介者模式的界说

中介者模式通过引入一个中介者对象,来封装对象之间的交互,防止对象之间的直接通讯,从而低沉类与类之间的耦合性。中介者模式的焦点头脑是将体系的运动分散到独立的类中,通过中介者来调和这些运动。
中介者模式的紧张脚色包罗:


  • 中介者(Mediator):界说了与同事对象通讯的接口。
  • 详细中介者(Concrete Mediator):实现中介者接口,调和各个同事对象之间的通讯。
  • 同事类(Colleague):各个同事类通过中介者对象来通讯,而不与其他同事类直接交互。
二、中介者模式的优点


  • 低沉类之间的耦合性:中介者模式通过引入一个中介者对象,使得各个同事类之间不再直接引用,从而低沉了类之间的耦合性,加强了体系的可维护性和扩展性。
  • 会合控制交互:全部对象之间的交互都由中介者控制和调和,使得体系的交互逻辑更加清晰,有助于维护和修改。
  • 便于扩展:中介者模式使得添加新的同事类或改变同事类的运动变得更加容易,由于这些改变不必要影响其他同事类的实现。
三、中介者模式的实现

下面以一个简化的谈天室应用为例,演示怎样在 Java 中实现中介者模式。
起首,我们界说中介者接口 ChatMediator 和同事类接口 User:
  1. // 中介者接口
  2. public interface ChatMediator {
  3.     void sendMessage(String message, User user);
  4.     void addUser(User user);
  5. }
  6. // 同事类接口
  7. public abstract class User {
  8.     protected ChatMediator mediator;
  9.     protected String name;
  10.     public User(ChatMediator mediator, String name) {
  11.         this.mediator = mediator;
  12.         this.name = name;
  13.     }
  14.     public abstract void send(String message);
  15.     public abstract void receive(String message);
  16. }
复制代码
接着,我们实现详细的中介者类 ChatMediatorImpl 和详细的同事类 UserImpl:
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. // 具体中介者类
  4. public class ChatMediatorImpl implements ChatMediator {
  5.     private List<User> users;
  6.     public ChatMediatorImpl() {
  7.         this.users = new ArrayList<>();
  8.     }
  9.     @Override
  10.     public void sendMessage(String message, User user) {
  11.         for (User u : this.users) {
  12.             // 消息不发送给消息的发送者
  13.             if (u != user) {
  14.                 u.receive(message);
  15.             }
  16.         }
  17.     }
  18.     @Override
  19.     public void addUser(User user) {
  20.         this.users.add(user);
  21.     }
  22. }
  23. // 具体同事类
  24. public class UserImpl extends User {
  25.     public UserImpl(ChatMediator mediator, String name) {
  26.         super(mediator, name);
  27.     }
  28.     @Override
  29.     public void send(String message) {
  30.         System.out.println(this.name + " 发送消息: " + message);
  31.         mediator.sendMessage(message, this);
  32.     }
  33.     @Override
  34.     public void receive(String message) {
  35.         System.out.println(this.name + " 收到消息: " + message);
  36.     }
  37. }
复制代码
末了,我们通过一个简单的场景展示怎样利用中介者模式:
  1. public class MediatorPatternDemo {
  2.     public static void main(String[] args) {
  3.         ChatMediator mediator = new ChatMediatorImpl();
  4.         User user1 = new UserImpl(mediator, "Alice");
  5.         User user2 = new UserImpl(mediator, "Bob");
  6.         User user3 = new UserImpl(mediator, "Charlie");
  7.         mediator.addUser(user1);
  8.         mediator.addUser(user2);
  9.         mediator.addUser(user3);
  10.         user1.send("Hello, everyone!");
  11.     }
  12. }
复制代码
在这个例子中,ChatMediatorImpl 充当了中介者,负责管理和调和 User 对象之间的通讯。通过中介者模式,各个 User 对象之间不再直接通讯,而是通过中介者转达消息,从而低沉了对象之间的耦合性。
四、中介者模式的应用场景

中介者模式实用于以下几种场景:

  • 一组对象之间存在复杂的依靠关系:比方,GUI 的窗口组件之间通常存在复杂的交互逻辑,通过中介者可以将这些交互封装在一个独立的对象中,简化组件之间的依靠。
  • 必要动态调解交互的对象聚集:比方,在谈天应用中,用户的参加和退出必要动态调解通讯对象的聚集,中介者模式可以很好地处置惩罚这种场景。
  • 克制对象间的紧耦合:如果体系中存在多个对象相互依靠且关系复杂,利用中介者模式可以克制类之间的直接引用,低沉体系的复杂性。
五、结语

中介者模式通过引入一个中介者对象,使得各个同事类之间的通讯更加疏松耦合,从而进步体系的可维护性和扩展性。固然中介者模式可以有效地淘汰对象之间的依靠性,但在实现过程中,大概会导致中介者对象变得过于复杂,因此在利用时必要审慎思量。
盼望通过本文的先容,可以大概资助你更好地明白和运用中介者模式,打造更加机动和易于维护的 Java 应用步调。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表