当前位置: 首页 > news >正文

中介者设计模式 软考

中介者设计模式(Mediator Design Pattern)是一种行为型设计模式,旨在通过定义一个中介者对象来封装一系列对象之间的交互,使得对象之间不需要直接交互,而是通过中介者进行通信,从而减少系统的复杂度。

中介者模式的应用场景:

  • 当多个类相互耦合,而通过中介者将它们解耦,从而避免直接的相互依赖。
  • 需要通过一个中心化的方式来控制对象之间的交互。

举例:聊天室中的中介者模式

在一个聊天室应用中,假设有多个用户(User),每个用户发送消息时,系统通过一个中介者(ChatRoom)来传递消息。这样,用户之间不直接通信,而是通过中介者来进行消息的传递。

Java代码示例:

1. User 类:表示参与聊天室的用户。
 

javaCopy Code

public class User { private String name; private ChatRoom chatRoom; public User(String name) { this.name = name; } // 设置中介者 public void setChatRoom(ChatRoom chatRoom) { this.chatRoom = chatRoom; } // 发送消息 public void sendMessage(String message) { chatRoom.showMessage(this, message); } public String getName() { return name; } }

2. ChatRoom 类:聊天室中介者,负责协调用户之间的消息传递。
 

javaCopy Code

import java.text.SimpleDateFormat; import java.util.Date; public class ChatRoom { // 显示消息 public void showMessage(User user, String message) { String time = new SimpleDateFormat("HH:mm:ss").format(new Date()); System.out.println("[" + time + "] " + user.getName() + ": " + message); } }

3. Main 类:创建用户并通过中介者发送消息。
 

javaCopy Code

public class Main { public static void main(String[] args) { // 创建聊天室(中介者) ChatRoom chatRoom = new ChatRoom(); // 创建用户 User user1 = new User("Alice"); User user2 = new User("Bob"); // 设置中介者 user1.setChatRoom(chatRoom); user2.setChatRoom(chatRoom); // 用户发送消息 user1.sendMessage("Hello, Bob!"); user2.sendMessage("Hi, Alice! How are you?"); } }

运行结果:

 

Copy Code

[12:34:56] Alice: Hello, Bob! [12:34:57] Bob: Hi, Alice! How are you?

解释:

  1. 中介者(ChatRoom 作为所有用户之间消息传递的中央管理者,用户通过 ChatRoom 来传递消息,而不直接与其他用户通信。
  2. 用户(User 只需要知道聊天室,而不需要知道其他用户的细节。
  3. 中介者模式通过将所有交互集中到一个中介对象中,避免了用户之间的直接依赖和耦合,简化了对象之间的通信。

优点:

  • 解耦:用户之间不直接依赖,减少了相互之间的耦合。
  • 集中控制:消息传递的控制权集中在中介者中,便于管理和修改。

缺点:

  • 中介者可能会变得非常庞大,成为系统的瓶颈。

http://www.mrgr.cn/news/69391.html

相关文章:

  • Flutter:android studio无法运行到模拟机的问题
  • Atlassian公司相关信息
  • PostgreSQL 修改序列
  • Linux git-bash配置
  • 数字化转型的路径、挑战和应用场景
  • 世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系
  • Chapter1:python数据结构与算法
  • 【STM32开发】-FreeRTOS开发入手学习
  • github高分项目 WGCLOUD - 运维实时管理工具
  • 通过代码复习回忆 DiffusionDet: DiffusionTracker——代码解析
  • 产品经理晋级-Axure中继器制作美观表格
  • 『VUE』22. 组件传递数据props(详细图文注释)
  • 从截图到代码:screenshot-to-code开源项目实践指南
  • 游戏开发--C#面试题
  • 找工作就上万码优才,海量技术岗位等你来
  • 二分答案-整型二分—愤怒的牛-P1676 [USACO05FEB] Aggressive cows G
  • 如何借助AI 来提高开发效率
  • 《操作系统 - 清华大学》2 -2:中断、异常和系统调用
  • C++20 概念与约束(2)—— 初识概念与约束
  • 记一次文件包含刷题(伪协议篇)
  • Python操作系统交互:subprocess库的基本应用
  • 【MySQL基础知识】内置的系统函数(5)
  • Python实现扩展卡尔曼滤波(EKF)
  • Scikit-learn:数据科学中的瑞士军刀
  • 详解overlay网络和underlay网络
  • 一文详解java的数据类型