Python设计模式-18-中介模式
中介模式是一种行为型设计模式,它允许对象之间通过一个中介对象进行通信,从而减少对象之间的直接耦合。中介模式通常包括以下几个角色:
-
中介者(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()
,用于与中介者通信。然后,我们定义了两个具体同事对象 ConcreteColleagueA
和 ConcreteColleagueB
,它们实现了同事对象定义的接口,并与其他同事对象通过中介者进行通信。
在使用中介模式时,我们可以通过一个中介者对象来协调各个同事对象之间的交互,从而减少对象之间的直接耦合。在上面的示例中,我们创建了一个中介者对象 mediator
,并将它分别设置为两个同事对象 colleague_a
和 colleague_b
的中介者。当同事对象调用send()
方法时,它会将消息发送给中介者,然后中介者会将消息转发给其他同事对象。需要注意的是,中介模式可以帮助我们减少对象之间的直接耦合,从而提高代码的可维护性和可扩展性。