中介者模式(Mediator Pattern):即时通讯软件实战案例分析

肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

即时通讯软件中,用户之间的消息传递需要一个集中的管理者来协调,以避免用户之间的直接耦合,简化消息传递逻辑。

2. 为什么要使用中介者设计模式

中介者模式定义了一个中介者对象,该对象封装了一组对象之间的交互。这使得各对象不需要显示地相互引用,从而使耦合度降低。

3. 标准中介者设计模式图

4. 业务中介者设计模式图

5. 业务代码参考

java 复制代码
    // 用户类
    class User {
        private String name;
        private ChatMediator mediator;

        public User(String name, ChatMediator mediator) {
            this.name = name;
            this.mediator = mediator;
            mediator.addUser(this);
        }

        public void send(String message) {
            System.out.println(name + " says: " + message);
        }

        public void receive(String message) {
            System.out.println("Received message: " + message);
        }

        public String getName() {
            return name;
        }
    }

    // 聊天中介者接口
    interface ChatMediator {
        void sendMessage(User user, String message);
    }

    // 具体聊天中介者
    class ConcreteChatMediator implements ChatMediator {
        private Map<String, User> users = new HashMap<>();

        @Override
        public void sendMessage(User user, String message) {
            for (User recipient : users.values()) {
                if (!recipient.getName().equals(user.getName())) {
                    recipient.receive(message);
                }
            }
        }

        public void addUser(User user) {
            users.put(user.getName(), user);
        }

        public User getUser(String name) {
            return users.get(name);
        }
    }

    // 客户端使用
    class InstantMessagingApp {
        public static void main(String[] args) {
            ConcreteChatMediator mediator = new ConcreteChatMediator();
            User lili = new User("lili", mediator);
            User sasa = new User("sasa", mediator);

            lili.send("Hi sasa, how are you?");
            sasa.send("Hi lili, I'm fine, thanks!");
        }
    }

6. 使用中介者设计模式的好处

  • 降低耦合度:用户之间的交互通过中介者进行,减少了对象之间的依赖。
  • 集中管理:消息传递逻辑集中管理,便于维护和扩展。

7. 其他使用中介者设计模式场景参考

  • UI组件交互:在复杂的图形用户界面中,组件之间的交互通过中介者进行协调。
  • 事件处理系统:事件的发布和订阅通过中介者模式进行管理。

8. 可参考开源框架

  • Java AWT 和 Swing:使用中介者模式来管理组件之间的交互。

总结

中介者模式通过引入一个中介者对象来简化对象之间的交互,降低了系统的耦合度,提高了系统的可维护性和可扩展性。

历史热点文章

相关推荐
lbh16 分钟前
当我开始像写代码一样和AI对话,一切都变了
前端·openai·ai编程
短剑重铸之日41 分钟前
《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
java·数据库·后端·架构·shardingsphere·分库分表
We་ct1 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
wefly20172 小时前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
C澒2 小时前
微前端容器标准化 —— 公共能力篇:通用打印
前端·架构
德育处主任Pro2 小时前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
木斯佳2 小时前
前端八股文面经大全:小红书前端一二面OC(下)·(2026-03-17)·面经深度解析
前端·vue3·proxy·八股·响应式
zhanggongzichu2 小时前
小白怎么理解后端分层概念
后端·全栈
陈天伟教授3 小时前
人工智能应用- 预测新冠病毒传染性:04. 中国:强力措施遏制疫情
前端·人工智能·安全·xss·csrf
zayzy3 小时前
前端八股总结
开发语言·前端·javascript