举动模式5.中介者模式-谈天室收发消息

[复制链接]
发表于 2025-11-14 09:34:06 | 显示全部楼层 |阅读模式

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

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

×
举动型模式


  • 模板方法模式(Template Method Pattern)
  • 下令模式(Command Pattern)
  • 迭代器模式(Iterator Pattern)
  • 观察者模式(Observer Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 表明器模式(Interpreter Pattern)
  • 状态模式(State Pattern)
  • 战略模式(Strategy Pattern)
  • 职责链模式(Chain of Responsibility Pattern)
  • 访问者模式(Visitor Pattern)

概述

中介者模式是一种举动筹划模式,它界说了一个对象,用来封装一组对象之间的交互。中介者模式通过使对象之间的交互会合化,从而淘汰了对象之间的直接依靠关系。如许,淘汰了类与类之间的耦合性,使得它们之间的交互变得更加清晰和可维护。
在中介者模式中,全部对象通过中介者对象来举行交互,而不是直接相互接洽。中介者通过和谐各个对象的举动来实现它们之间的协作。
关键构成


  • Mediator(中介者):界说一个接口,用于与各个同事对象举行交互。
  • ConcreteMediator(详细中介者):实现 Mediator 接口,和谐各个同事对象之间的交互。
  • Colleague(同事):每个同事对象都知道中介者,并通过中介者与其他同事对象举行通讯。
  • ConcreteColleague(详细同事):实现 Colleague 接口,代表详细的同事类。
优点


  • 淘汰类之间的依靠:对象不再直接引用其他对象,而是通过中介者举行交互,低落了耦合度。
  • 会合化控制:全部的交互举动由中介者控制,代码更易于管理和扩展。
  • 易于扩展:新增同事类时,根本上不须要修改原有代码,符合开闭原则。
缺点


  • 中介者复杂化:中介者脚色大概变得过于巨大,变得难以管理。
  • 单一职责违背:一个中介者大概处理处罚过多差别对象的交互,导致职责不但一。
实用场景


  • 多个对象之间存在复杂的交互关系。
  • 渴望通过淘汰对象间直接通讯来低落耦合度。
  • 渴望会合控制对象间的交互逻辑。
Java 示例代码

假设我们有一个谈天室体系,多个用户(同事)可以在谈天室中发送和吸取消息,但每个用户不直接与其他用户通讯,而是通过一个中介者来和谐消息的发送与吸取。
  1. // Mediator (中介者接口)
  2. interface ChatMediator {
  3.     void sendMessage(String message, User user);
  4.     void addUser(User user);
  5. }
  6. // ConcreteMediator (具体中介者)
  7. class ChatRoom implements ChatMediator {
  8.     private List<User> users;
  9.     public ChatRoom() {
  10.         this.users = new ArrayList<>();
  11.     }
  12.     @Override
  13.     public void sendMessage(String message, User user) {
  14.         for (User u : users) {
  15.             // 不向发送者自己发送消息
  16.             if (u != user) {
  17.                 u.receive(message);
  18.             }
  19.         }
  20.     }
  21.     @Override
  22.     public void addUser(User user) {
  23.         users.add(user);
  24.     }
  25. }
  26. // Colleague (同事接口)
  27. abstract class User {
  28.     protected ChatMediator mediator;
  29.     protected String name;
  30.     public User(ChatMediator mediator, String name) {
  31.         this.mediator = mediator;
  32.         this.name = name;
  33.     }
  34.     public abstract void send(String message);
  35.     public abstract void receive(String message);
  36. }
  37. // ConcreteColleague (具体同事)
  38. class ConcreteUser extends User {
  39.    
  40.     public ConcreteUser(ChatMediator mediator, String name) {
  41.         super(mediator, name);
  42.     }
  43.     @Override
  44.     public void send(String message) {
  45.         System.out.println(this.name + " sends message: " + message);
  46.         mediator.sendMessage(message, this);
  47.     }
  48.     @Override
  49.     public void receive(String message) {
  50.         System.out.println(this.name + " receives message: " + message);
  51.     }
  52. }
  53. // 客户端代码示例
  54. public class MediatorPatternExample {
  55.     public static void main(String[] args) {
  56.         // 创建中介者对象(聊天室)
  57.         ChatMediator chatRoom = new ChatRoom();
  58.         // 创建具体用户并加入聊天室
  59.         User user1 = new ConcreteUser(chatRoom, "Alice");
  60.         User user2 = new ConcreteUser(chatRoom, "Bob");
  61.         User user3 = new ConcreteUser(chatRoom, "Charlie");
  62.         chatRoom.addUser(user1);
  63.         chatRoom.addUser(user2);
  64.         chatRoom.addUser(user3);
  65.         // 用户发送消息
  66.         user1.send("Hello, everyone!");
  67.         user2.send("Hi Alice!");
  68.         user3.send("Hey all!");
  69.     }
  70. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

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