首页 > 其他分享 >设计模式-中介者模式

设计模式-中介者模式

时间:2025-01-16 09:33:11浏览次数:1  
标签:String chatRoom 模式 User 中介 设计模式 交互 public

中介者模式(Mediator Pattern)概述

定义
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过定义一个中介者对象来封装一系列对象之间的交互,使得这些对象之间不直接交互,从而减少了对象之间的依赖关系,降低了系统的复杂度。

在中介者模式中,各个对象通过中介者进行通信,避免了它们之间的直接耦合。中介者通常是一个中央控制器,负责协调和管理对象之间的交互。


中介者模式的角色

  1. 抽象中介者(Mediator):定义同事对象之间交互的接口。
  2. 具体中介者(ConcreteMediator):实现抽象中介者,协调不同的同事对象的交互。
  3. 同事类(Colleague):每个同事类通过中介者与其他同事类交互,通常会在中介者中注册自己。

示例:聊天应用中的中介者模式

假设有一个聊天应用,每个用户是一个同事类,而聊天系统本身是一个中介者,负责协调不同用户之间的消息传递。

Java 实现代码

// 抽象中介者
abstract class ChatRoom {
    public abstract void sendMessage(String message, User user);
}

// 具体中介者
class ConcreteChatRoom extends ChatRoom {
    @Override
    public void sendMessage(String message, User user) {
        System.out.println(user.getName() + " 说: " + message);
    }
}

// 同事类 - 用户
class User {
    private String name;
    private ChatRoom chatRoom;

    public User(String name, ChatRoom chatRoom) {
        this.name = name;
        this.chatRoom = chatRoom;
    }

    public String getName() {
        return name;
    }

    public void sendMessage(String message) {
        chatRoom.sendMessage(message, this);
    }
}

// 客户端
public class MediatorPatternDemo {
    public static void main(String[] args) {
        // 创建中介者(聊天系统)
        ChatRoom chatRoom = new ConcreteChatRoom();

        // 创建用户并加入中介者
        User user1 = new User("Alice", chatRoom);
        User user2 = new User("Bob", chatRoom);

        // 用户发送消息
        user1.sendMessage("你好,Bob!");
        user2.sendMessage("你好,Alice!");
    }
}

输出结果

Alice 说: 你好,Bob!
Bob 说: 你好,Alice!

中介者模式的优点

  1. 降低耦合度:对象不再直接相互通信,而是通过中介者进行通信,减少了对象之间的依赖关系。
  2. 集中管理:中介者负责协调对象之间的交互,所有的交互逻辑集中在一个地方,易于管理和扩展。
  3. 提高可扩展性:新增同事对象时,无需修改现有的同事类,只需要在中介者中进行相应的修改。

中介者模式的缺点

  1. 增加中介者的复杂度:所有的交互逻辑都集中在中介者中,可能导致中介者的代码变得复杂。
  2. 可能成为系统的瓶颈:中介者作为中心控制者,如果过于复杂,可能成为系统的性能瓶颈。

使用场景

  1. GUI组件协作:在图形用户界面(GUI)中,不同的控件可能需要协作。中介者模式可以用于在不同的控件之间提供协调和管理。
  2. 聊天应用:如上述示例,用户通过中介者进行消息传递,避免了用户之间直接的耦合。
  3. 工作流管理:不同任务或节点之间的交互可以通过中介者进行管理。

通过中介者模式,可以将对象间复杂的交互转移到一个中介者中,使得系统结构更加简洁,易于管理和扩展。

标签:String,chatRoom,模式,User,中介,设计模式,交互,public
From: https://www.cnblogs.com/pangchunlei/p/18674258

相关文章

  • 一元多项式的求导(附加代码模式)
    题目描述一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的一元多项式进行求导,并输出求导的结果。本题是附加代码模式,主函数main会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉附加代码。附加代码如下:int main(){  ......
  • 服务端开发模式-thinkphp-重新整理workman
    一、登录接口<?php/***登录退出操作*User:龙哥·三年风水*Date:2024/10/29*Time:15:53*/namespaceapp\controller\common;useapp\controller\Emptys;useapp\model\permission\Admin;useapp\model\param\SystemasSystemModel;useEmail\EmailSen......
  • TEMPLATE METHOD(模板方法)—类行为型模式
    1.意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.动机考虑一个提供Application和Document类的应用框架。Application类负责打开一......
  • STRATEGY(策略)—对象行为型模式
    1.意图定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。2.别名政策(Policy)3.动机有许多算法可对一个正文流进行分行。将这些算法硬编进使用它们的类中是不可取的,其原因如下:•需要换行功能的客户程序......
  • MEDIATOR(中介者)—对象行为型模式
    1.意图用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。2.动机面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对......
  • 商业模式画布BMC如何使用:提升企业战略规划力
    想象一下,你正站在一个充满无限可能的画布前,每一笔都可能勾勒出企业未来的蓝图。这不仅是一幅简单的画,而是一份战略地图——一份关于如何连接客户、创造价值、驱动收入的完整指南。这就是商业模式画布(BusinessModelCanvas,BMC),一个为企业设计和优化商业模式而生的神器。由亚历山......
  • 一文读懂Redis之哨兵(Sentinel)模式搭建
    目录一、环境规划二、Redis服务主从模式搭建步骤一、Master节点创建目录步骤二、Master节点下载Redis安装包步骤三、Master节点解压Redis安装包步骤四、Master节点进行make编译步骤五、Slave01节点、Slave02节点根据步骤一至步骤四安装Redis服务步骤六、Master节点修......
  • SpringBoot 插件化开发模式
    一、前言unsetunset1.1使用插件的好处1.1.1模块解耦实现服务模块之间解耦的方式有很多,但是插件来说,其解耦的程度似乎更高,而且更灵活,可定制化、个性化更好。举例来说,代码中可以使用设计模式来选择使用哪种方式发送短信给下单完成的客户,问题是各个短信服务商并不一定能保证......
  • Nginx+keepalived 双机热备(主从模式)
    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。关于负载均衡介绍,可以参考:linux负载均衡总结性说明(四层负载/七层负载)由于业务扩展,网站的访问量不断加大,负载越来越高。......
  • 模式识别课程设计报告-Iris鸢尾花样本集多种分类算法实现
     课程实验报告,从前人的总结分享中学习借鉴了很多,上传记录,或许能帮到有需要的人。任务一:(1)从sklean中导入iris数据集(2)从CSV文件中导入iris数据集任务二:(1)利用sklearn中的model_selection.train_split()函数将样本集划分为训练集和测试集(2)定义一个函数plot_points(),该函数的功能......