首页 > 编程语言 >Python设计模式-18-中介模式

Python设计模式-18-中介模式

时间:2023-06-16 18:57:17浏览次数:50  
标签:colleague Python 18 self 同事 中介 对象 message 设计模式

中介模式是一种行为型设计模式,它允许对象之间通过一个中介对象进行通信,从而减少对象之间的直接耦合。中介模式通常包括以下几个角色:

  • 中介者(Mediator):定义了一个接口,用于与各个同事对象通信,并协调它们之间的交互。

  • 具体中介者(Concrete Mediator):实现了中介者定义的接口,并协调各个同事对象之间的交互。

  • 同事对象(Colleague):定义了一个接口,用于与中介者通信。

具体同事对象(Concrete Colleague):实现了同事对象定义的接口,并与其他同事对象通过中介者进行通信。

下面是一个简单的 Python 示例,演示了如何使用中介模式:

class Mediator:
    def send(self, message, colleague):
        pass

class ConcreteMediator(Mediator):
    def __init__(self):
        self.colleague_a = None
        self.colleague_b = None

    def set_colleague_a(self, colleague_a):
        self.colleague_a = colleague_a

    def set_colleague_b(self, colleague_b):
        self.colleague_b = colleague_b

    def send(self, message, colleague):
        if colleague == self.colleague_a:
            self.colleague_b.receive(message)
        elif colleague == self.colleague_b:
            self.colleague_a.receive(message)

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

    def send(self, message):
        self.mediator.send(message, self)

    def receive(self, message):
        pass

class ConcreteColleagueA(Colleague):
    def receive(self, message):
        print(f'ConcreteColleagueA: Received "{message}".')

class ConcreteColleagueB(Colleague):
    def receive(self, message):
        print(f'ConcreteColleagueB: Received "{message}".')

mediator = ConcreteMediator()

colleague_a= ConcreteColleagueA(mediator)
colleague_b = ConcreteColleagueB(mediator)

mediator.set_colleague_a(colleague_a)
mediator.set_colleague_b(colleague_b)

colleague_a.send('Hello, colleague B!')
colleague_b.send('Hi, colleague A!')

在上面的示例中,我们定义了一个中介者 Mediator,它定义了一个接口 send(),用于与各个同事对象通信,并协调它们之间的交互。然后,我们定义了一个具体中介者 ConcreteMediator,它实现了中介者定义的接口,并协调各个同事对象之间的交互。接下来,我们定义了一个同事对象 Colleague,它定义了一个接口 send() receive(),用于与中介者通信。然后,我们定义了两个具体同事对象 ConcreteColleagueAConcreteColleagueB,它们实现了同事对象定义的接口,并与其他同事对象通过中介者进行通信。

在使用中介模式时,我们可以通过一个中介者对象来协调各个同事对象之间的交互,从而减少对象之间的直接耦合。在上面的示例中,我们创建了一个中介者对象 mediator,并将它分别设置为两个同事对象 colleague_acolleague_b 的中介者。当同事对象调用send() 方法时,它会将消息发送给中介者,然后中介者会将消息转发给其他同事对象。需要注意的是,中介模式可以帮助我们减少对象之间的直接耦合,从而提高代码的可维护性和可扩展性。

标签:colleague,Python,18,self,同事,中介,对象,message,设计模式
From: https://www.cnblogs.com/superhin/p/17486318.html

相关文章

  • Python设计模式-19-备忘录模式
    备忘录模式是一种行为型设计模式,它允许我们在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。备忘录模式通常包括以下几个角色:发起人(Originator):定义了一个接口,用于创建备忘录对象和恢复对象状态。备忘录(Memento):存储发起人对象的内部状态。管理......
  • Python设计模式-20-迭代器模式
    迭代器模式是一种行为型设计模式,它允许我们按照顺序访问一个聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式通常包括以下几个角色:迭代器(Iterator):定义了一个接口,用于按照顺序访问聚合对象中的元素。具体迭代器(ConcreteIterator):实现了迭代器定义的接口,并维护了当......
  • Python设计模式-21-解释器模式
    解释器模式是一种行为型设计模式,它定义了一种语言,用于解释和执行特定的任务。解释器模式通常包括以下几个角色:抽象表达式(AbstractExpression):定义了一个接口,用于解释和执行特定的任务。终结符表达式(TerminalExpression):实现了抽象表达式定义的接口,并表示语言中的终结符。......
  • Python设计模式-22-模板模式
    模板模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板模式通常包括以下几个角色:抽象类(AbstractClass):定义了一个算法的骨架,其中包含一些抽象方法,用于延迟到子类中实现。具体类(ConcreteClass):实现了抽象类定义的接口,并实现了其中的抽象方法......
  • Python设计模式-06-代理模式
    代理模式是一种结构型设计模式,它提供了一个代理对象来控制对另一个对象的访问。代理模式通常包括以下几个角色:抽象主题(Subject):定义了代理对象和真实对象的公共接口,可以是一个抽象类或接口。真实主题(RealSubject):定义了代理对象所代表的真实对象。代理(Proxy):持有一个真实对象的......
  • vue3:vue+nginx+php进行服务端部署的配置(nginx/1.18.0 / [email protected])
    一,开发环境中的配置:1,前端:vue的vue.config.jsconst{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({transpileDependencies:true,publicPath:process.env.NODE_ENV==="production"?"./":"/&qu......
  • Python设计模式-07-桥接模式
    桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离开来,使它们可以独立地变化。桥接模式通常包括以下几个角色:抽象部分(Abstraction):定义了抽象部分的接口,并持有一个实现部分的引用。扩展抽象部分(RefinedAbstraction):扩展了抽象部分的接口,可以包含一些额外的行为。实现部......
  • Python设计模式-08-组合模式
    模式是一种结构型设计模式,它允许我们将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式通常包括以下几个角色:组件(Component):定义了组合中所有对象的通用接口,可以是一个抽象类或接口。叶子节点(Leaf):表示组合中的叶子节点,它没有子节点。组合节点(Composite):表示组合中的......
  • Python设计模式-09-外观模式
    外观模式是一种结构型设计模式,它提供了一个简单的接口,隐藏了系统的复杂性,使得客户端可以更容易地使用系统。外观模式通常包括以下几个角色:外观(Facade):提供了一个简单的接口,隐藏了系统的复杂性,使得客户端可以更容易地使用系统。子系统(Subsystem):实现了系统的功能,但对客户端是不可......
  • 运行python -m uiautomator2 init报错AttributeError: module 'collections' has no a
    报错信息:Traceback(mostrecentcalllast):File"E:\Carte\BB\17-SiteLeadership\alte\IonelBalauta\Aryeht\Task1-Traducetotsite-ul\DoarGoogleWeb\Andreea\Meditatii\Sedinta9(2022)(EMAIL)\BEBE-PARSING-Python(fararedenumire2).p......