软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式

这篇具有很好参考价值的文章主要介绍了软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三、中介者模式(迪米特法则)

概念

模式动机:
为了减少对象两之间复杂的引用关系,使之成为一个松耦合的系统,需要适用中介者模式

定义:
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使耦合松散,而且可以独立地该变它们之间的交互

中介者模式又称为调停者模式,它是一种对象行为型模式
中介者模式的要点是将所有对象之间的交互细节抽象到一个独立的类中,这个类叫做中介者类Mediator
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式

类图

软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式

代码

中介者模式(Mediator Pattern)是一种软件设计模式,它通过将对象之间的交互行为封装在一个中介者对象中,来实现对象之间的解耦。中介者模式促进了对象之间的松耦合,使其更易于维护和扩展。

下面是一个简单的中介者模式的代码示例,以说明其工作原理:

class Mediator:
    def __init__(self):
        self.component1 = Component1(self)
        self.component2 = Component2(self)

    def notify(self, sender, event):
        if event == 'event1':
            self.component2.do_something()
        elif event == 'event2':
            self.component1.do_something()

class Component1:
    def __init__(self, mediator):
        self.mediator = mediator

    def do_something(self):
        # 处理自己的逻辑
        print("Component 1 does something.")
        # 触发事件通知中介者
        self.mediator.notify(self, 'event1')

class Component2:
    def __init__(self, mediator):
        self.mediator = mediator

    def do_something(self):
        # 处理自己的逻辑
        print("Component 2 does something.")
        # 触发事件通知中介者
        self.mediator.notify(self, 'event2')

# 创建中介者对象
mediator = Mediator()

# 执行操作
component1 = Component1(mediator)
component2 = Component2(mediator)
component1.do_something()

在上述代码示例中,我们有一个中介者类 Mediator 和两个组件类 Component1Component2。中介者类拥有对这两个组件的引用,并提供了一个 notify 方法用于接收事件通知并根据不同的事件执行相应的操作。

当组件 Component1 执行 do_something 方法时,它会触发事件通知中介者,中介者根据事件类型调用 Component2 的相应方法。同样地,当组件 Component2 执行 do_something 方法时,它也会触发事件通知中介者,中介者根据事件类型调用 Component1 的相应方法。

这样,组件之间的交互行为通过中介者对象进行了封装,组件之间的耦合度降低,它们只需要与中介者进行通信,而不需要直接相互交互。这种解耦有助于增强代码的可维护性和扩展性。

中介者模式在现实世界中有许多应用,比如聊天室、航空交通管制系统等,它们都使用中介者来协调不同对象之间的交互行为,从而实现更好的系统设计。

中介者承担两方面的职责

中转作用(结构性):

通过中介者提供的中转作用各个同事对象就不再需要显式引用其他同事,当需要和其他同事进行通信时,通过中介者即可。
中转作用属于中介者在结构上的支持

协调作用(行为性):

中介者可以更进一步的对同事之间的关系进行封装,同事可以一致地和中介者进行交互,而不需要指明中介者需要具体怎么做,中介者根据封装在自身内部的协调逻辑,对同事的请求进行进一步处理,将同事成员之间的关系行为进行分离和封装。
协调作用属于中介者在行为上的支持

实例一:旅游项目信息共享软件的设计

软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式

实例二:海岛微型飞机场

软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式

优缺点

优点:
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式

缺点:

在具体中介者类中包含了同事之间的交互细节可能会导致具体中介者类非常复杂,使得系统难以维护

适用场合

  1. 系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解。
  2. 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象
  3. 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的中介者类

中介者模式与迪米特法则

在中介者模式中,通过创造出一个中介者对象,将系统中有关的对象所引用的其他对象数目减少到最少,使得一个对象与其同事之间的相互作用被这个对象与中介者对象之间的相互作用所取代。因此,中介者模式就是迪米特法则的一个典型应用。

课程作业

软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式

软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式
软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式,软件设计模式与体系结构,设计模式,中介者模式文章来源地址https://www.toymoban.com/news/detail-533105.html

到了这里,关于软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中级软件设计师备考---计算机组成与体系结构1

    对于n位二进制数,原码、反码和补码的表示范围如下: 原码:用最高位表示符号位,0表示正数,1表示负数。n位二进制数的原码表示范围为:-(2 n-1 -1) ~ 2 n-1 -1。 反码:正数的反码与原码相同,负数的反码是将原码中除符号位外的所有位取反。n位二进制数的反码表示范围

    2023年04月09日
    浏览(39)
  • 【软件设计师暴击考点】计算机组成原理与体系结构高频考点暴击系列【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : 软件设计师考点暴击 下午题 ⭐【软件设计师暴击考点】下午题高频考点暴击系列 上午题目录 进入专栏浏览:

    2024年02月10日
    浏览(31)
  • 软件工程(十五) 行为型设计模式(一)

    简要说明 通过多个对象处理的请求,减少请求的发送者与接收者之间的耦合。将接受对象 链接 起来,在链中传递请求,直到有一个对象处理这个请求。 速记 传递职责 类图如下 由类图可以比较容易的看出来,其实就是自己关联自己,形成了一个链,并且自己有不同的

    2024年02月11日
    浏览(36)
  • 软件工程(十八) 行为型设计模式(四)

    简要说明 允许一个对象在其内部改变时改变它的行为 速记 状态变成类 类图如下 状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。比如订单从待付款到待收货的咋黄台发生变化,执行的逻辑是不一样的。 所以我们将状态抽象为一个接口

    2024年02月11日
    浏览(40)
  • 软件工程(十七) 行为型设计模式(三)

    简要说明 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 速记 联动,广播消息 类图如下 基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被观察对象接口(IObservable),Observer对应我们

    2024年02月11日
    浏览(32)
  • C++面试:单例模式、工厂模式等简单的设计模式 & 创建型、结构型、行为型设计模式的应用技巧

            理解和能够实现基本的设计模式是非常重要的。这里,我们将探讨两种常见的设计模式:单例模式和工厂模式,并提供一些面试准备的建议。 目录 单例模式 (Singleton Pattern) 工厂模式 (Factory Pattern) 面试准备  1. 理解设计模式的基本概念 2. 掌握实现细节 3. 讨论优缺

    2024年02月01日
    浏览(52)
  • 基于体系结构架构设计-架构真题(十五)

    基于体系结构开发设计(Architecture-Base Software Design)ABSD,是指构成体系结构的()组合驱动,ABSC方法是一个自项向下、递归细化的方法,软件系统的体系结构通过该方法细化,直到能产生()。 产品、功能需求和设计活动 商业、质量和功能需求 商业、产品和功能需求 商业

    2024年02月10日
    浏览(26)
  • 软件工程(十三) 设计模式之结构型设计模式(一)

    前面我们记录了创建型设计模式,知道了通过各种模式去创建和管理我们的对象。但是除了对象的创建,我们还有一些结构型的模式。 简要说明 将一个类的接口转换为用户希望得到的另一个接口。它使原本不相同的接口得以协同工作。 速记 转换接口 类图如下 角色说

    2024年02月11日
    浏览(36)
  • 软件设计实验三 结构型设计模式实验

    1.结合实例,熟练绘制常见的结构型设计模式结构图。 2.结合实例,熟练使用任意一种面向对象编程语言实现常见的结构型设计模式。 3.通过本实验,理解每一种结构型设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。 1.现有一个接口DataOperation定义

    2024年02月03日
    浏览(38)
  • 软件工程(十四) 设计模式之结构型模式(二)

    简要说明 将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 速记 树形目录结构 类图如下 由类图其实可以看出,组合模式就是将具有父子关系的结构,组装形成一棵树,并且根据规范,树干节点和叶子节点均

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包