📜  中介者方法Python设计模式(1)

📅  最后修改于: 2023-12-03 14:48:53.873000             🧑  作者: Mango

中介者方法 Python 设计模式

中介者方法是一种行为设计模式,它简化了组件之间的通信,同时将这些组件解耦。 在中介者模式中,最重要的是中介者本身,它充当了所有组件的协调者角色。 中介者基于组件之间的通信实现了相互作用,并允许组件之间解耦。 它减少了程序中的紧耦合,增强了程序的可维护性和可扩展性。在本文中,我们将探讨如何使用 Python 实现中介者模式。

如何实现中介者方法设计模式
1. 定义中介者

中介者是整个中介者模式的核心。 最好先定义一个通用的中介者接口,然后为每个组件定义一个具体的中介者。 中介者接口应该定义一个方法,以便我们将消息从一个组件发送到另一个组件。

from abc import ABC, abstractmethod

class Mediator(ABC):
    @abstractmethod
    def send(self, message: str, sender: object) -> None:
        pass
2. 定义组件

接下来,我们需要定义所有组件并将它们引入中介者。 每个组件都应该实现一个发送消息的方法,并将这个方法发送给中介者。

class Component:
    def __init__(self, mediator: Mediator = None):
        self.mediator = mediator

    def send(self, message: str) -> None:
        self.mediator.send(message, self)
3. 创建具体中介者并实现中介者接口

接下来,我们需要为每个组件实例化中介者。 在这个例子中,我们将使用具体的中介者类,该类将实现中介者接口并处理组件之间的通信。

class ConcreteMediator(Mediator):
    def __init__(self, component1: Component, component2: Component):
        self.component1 = component1
        self.component1.mediator = self
        self.component2 = component2
        self.component2.mediator = self

    def send(self, message: str, sender: object) -> None:
        if sender == self.component1:
            self.component2.receive(message)
        else:
            self.component1.receive(message)
4. 创建具体的组件并引入中介者

最后,我们创建具体的组件并将它们引入中介者。

class ConcreteComponent1(Component):
    def receive(self, message: str) -> None:
        print(f"Component 1 received message: {message}")

class ConcreteComponent2(Component):
    def receive(self, message: str) -> None:
        print(f"Component 2 received message: {message}")

if __name__ == "__main__":
    component1 = ConcreteComponent1()
    component2 = ConcreteComponent2()
    mediator = ConcreteMediator(component1, component2)

    component1.send("Hello, World!")
    component2.send("Hi there!")
中介者方法设计模式优点

中介者模式的最大优点是它能够简化程序并减少紧耦合。 在代码里,我们可能会经常遇到许多有关通信和协作的复杂问题。 这些问题通常很难处理,并且在两个或更多组件之间增加耦合也很容易。 使用中介者可以减少这些耦合,简化代码并使维护和扩展更加容易。

print('中介者方法 Python 设计模式介绍完毕')

输出结果如下:

中介者方法 Python 设计模式介绍完毕