设计模式- 中介者模式(Mediator Pattern)结构|原理|优缺点|场景|示例

本文主要是介绍设计模式- 中介者模式(Mediator Pattern)结构|原理|优缺点|场景|示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                     设计模式(分类)        设计模式(六大原则)   

    创建型(5种)        工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式

    结构型(7种)        适配器模式        装饰器模式        代理模式        ​​​​​​外观模式      桥接模式        组合模式       享元模式

    行为型(11种)      策略模式        模板方法模式        观察者模式        迭代器模式     责任链模式     命令模式    备忘录模式          状态模式         访问者模式        中介者模式 


中介者模式(Mediator Pattern)是一种行为设计模式,它通过引入一个中介者对象来封装多个对象之间复杂的交互关系,使对象之间不必相互引用,从而减少对象间的耦合。中介者使各个对象不需要显式地相互引用,而是通过中介者进行间接通信,从而降低系统的复杂性和提高可维护性。

结构: 中介者模式的主要组成部分包括:

  1. Mediator(中介者):定义一个接口,用于同事对象之间的通信。具体中介者通过实现该接口,来协调各同事对象的行为。
  2. Colleague(同事类):每个同事类都了解中介者,并且通过中介者与其他同事通信,而不是直接与其他同事通信。每个同事类都维持一个对中介者的引用。
  3. ConcreteMediator(具体中介者):具体中介者实现中介者接口,它通常会持有多个同事对象的引用,用于协调和管理同事之间的交互。

原理:

  • 同事对象不再直接相互引用,而是将交互请求发送给中介者。
  • 中介者接收到请求后,根据请求内容和当前状态,决定如何响应或转发请求给适当的同事对象。
  • 通过中介者,可以集中管理对象间的交互,降低了对象间的耦合度,使得系统易于扩展和维护。

优缺点:

 优点:

  • 减少了类间直接耦合,使得对象易于复用和维护。
  • 中央控制,使得复杂系统中的对象交互更加清晰和灵活。
  • 方便添加新的交互方式或同事类,符合开闭原则。

缺点:

  • 中介者集中了控制权,一旦中介者出现问题,可能会影响整个系统。
  • 随着同事类的增多,中介者可能会变得复杂和难以管理。

应用场景:

  • 当一个系统中对象之间的交互非常多且复杂,导致难以理解各个对象的职责时。
  • 需要控制和协调多个对象间交互,避免对象间的紧耦合时。
  • 在图形用户界面(GUI)开发中,协调多个组件之间的交互。

代码示例(以Java为例) 

// 抽象中介者
interface ChatRoom {void sendMessage(String message, User user);
}// 具体中介者:聊天室
class ConcreteChatRoom implements ChatRoom {@Overridepublic void sendMessage(String message, User user) {for (User u : users) {if (!u.equals(user)) {u.receive(message);}}}// 管理用户列表private List<User> users = new ArrayList<>();public void addUser(User user) {users.add(user);}
}// 抽象同事类
abstract class User {protected String name;protected ChatRoom chatRoom;public User(String name, ChatRoom chatRoom) {this.name = name;this.chatRoom = chatRoom;}abstract void receive(String message);
}// 具体同事类:用户
class ConcreteUser extends User {public ConcreteUser(String name, ChatRoom chatRoom) {super(name, chatRoom);}@Overridevoid receive(String message) {System.out.println(name + " received: " + message);}public void sendMessage(String message) {chatRoom.sendMessage(message, this);}
}// 示例使用
public class MediatorPatternDemo {public static void main(String[] args) {ChatRoom chatRoom = new ConcreteChatRoom();User alice = new ConcreteUser("Alice", chatRoom);User bob = new ConcreteUser("Bob", chatRoom);chatRoom.addUser(alice);chatRoom.addUser(bob);alice.sendMessage("Hello, Bob!");bob.sendMessage("Hi, Alice!");}
}

 在这个例子中,ChatRoom作为中介者,管理着用户(User)之间的消息发送。用户之间并不直接通信,而是通过调用聊天室的sendMessage方法来间接通信。这样,即使增加新的用户或改变消息传播逻辑,也只需修改ChatRoom类,而无需修改用户类,符合中介者模式的设计思想。

这篇关于设计模式- 中介者模式(Mediator Pattern)结构|原理|优缺点|场景|示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947704

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

微信小程序开发必知必会:文件结构和基本配置

一、微信小程序基本文件结构 1.  project.config.json:项目的基本配置文件,包括项目名称、appid、项目目录、页面文件夹等。     {"setting": {"urlCheck": false,"es6": true,"postcss": true,"nodeModulesPath": "D:\\\\node_modules"},"appid": "wxd678e

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Serv

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

利用结构体作为函数参数时结构体指针的定义

在利用结构体作为函数的参数进行传递时,容易犯的一个错误是将一个野指针传给函数导致错误。 #include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10typedef struct {int r[MAXSIZE]; //用于存储要排序的数组,r[0]作为哨兵或者临时变量int length;