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

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

概念

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

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

中介者模式又称为调停者模式,它是一种对象行为型模式
中介者模式的要点是将所有对象之间的交互细节抽象到一个独立的类中,这个类叫做中介者类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. 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的中介者类

中介者模式与迪米特法则

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

课程作业

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VengaZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值