中介者模式:简化对象间的通信

2024-04-24 06:28

本文主要是介绍中介者模式:简化对象间的通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在软件设计中,当一个系统中的对象相互高度依赖,且通信关系错综复杂时,理解和维护这样的系统将变得非常困难。中介者模式(Mediator Pattern)提供了一种解决方案,它通过定义一个中介者对象来封装一系列对象之间的交互,从而降低系统的耦合度,使得对象之间的关系更加清晰。

中介者模式的结构

中介者模式包含以下主要角色:

  1. 中介者(Mediator):定义一个中介者接口,用于封装同事对象之间的交互。
  2. 具体中介者(Concrete Mediator):实现中介者接口,具体封装同事对象之间的交互逻辑。
  3. 同事对象(Colleague):系统中的各个对象,它们知道中介者对象,并通过中介者与其他同事对象通信。

中介者模式的实现

以下是一个简单的Java实现示例:

// 抽象中介者接口
interface Mediator {void register(Colleague colleague);void relay(Colleague colleague);
}// 具体中介者实现
class ConcreteMediator implements Mediator {private List<Colleague> colleagues = new ArrayList<>();@Overridepublic void register(Colleague colleague) {colleagues.add(colleague);}@Overridepublic void relay(Colleague colleague) {for (Colleague c : colleagues) {if (c != colleague) {c.notify();}}}
}// 抽象同事类
abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}public abstract void notify();public abstract void receive(String message);
}// 具体同事类A
class ConcreteColleagueA extends Colleague {public ConcreteColleagueA(Mediator mediator) {super(mediator);mediator.register(this);}@Overridepublic void notify() {// 处理接收到的消息}@Overridepublic void receive(String message) {System.out.println("Colleague A received message: " + message);}
}// 具体同事类B
class ConcreteColleagueB extends Colleague {public ConcreteColleagueB(Mediator mediator) {super(mediator);mediator.register(this);}@Overridepublic void notify() {// 处理接收到的消息}@Overridepublic void receive(String message) {System.out.println("Colleague B received message: " + message);}
}// 客户端代码
public class Client {public static void main(String[] args) {Mediator mediator = new ConcreteMediator();Colleague colleagueA = new ConcreteColleagueA(mediator);Colleague colleagueB = new ConcreteColleagueB(mediator);// 模拟发送消息colleagueA.receive("Hello from A");colleagueB.receive("Hello from B");}
}

在这个例子中,我们定义了一个中介者接口Mediator和具体中介者实现ConcreteMediator,它负责注册同事对象并转发消息。Colleague是抽象同事类,定义了同事对象的接口,具体同事类如ConcreteColleagueAConcreteColleagueB实现了这些接口,并定义了如何接收和响应消息。

中介者模式的应用场景

  • 对象间的通信过于复杂:当系统中对象之间的通信关系错综复杂时,使用中介者模式可以简化这些关系。
  • 需要一个统一的通信中心:当系统中的对象需要通过一个中心节点进行通信时,中介者模式可以提供这样的中心节点。

中介者模式的优点

  • 降低耦合度:通过中介者对象,减少了对象之间的直接依赖,降低了系统的耦合度。
  • 提高可维护性:对象之间的交互逻辑被集中管理,提高了系统的可维护性。
  • 易于扩展:添加新的同事对象变得更加容易,只需实现Colleague接口即可。

结论

中介者模式是一种有效的软件设计模式,它通过引入中介者对象来简化复杂的对象通信关系。这种模式提高了系统的模块化和可维护性,使得对象之间的关系更加清晰。在实际开发中,中介者模式常用于构建具有多个交互组件的大型系统。掌握中介者模式,可以帮助开发者更好地设计和实现复杂的通信逻辑。

这篇关于中介者模式:简化对象间的通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者