中介者模式(Mediator Pattern)是一种行为设计模式,用于减少对象之间的直接通信,而是通过一个中介对象来协调对象之间的交互。这种模式有助于减少类之间的耦合度,使系统更易于维护和扩展。
### 结构
- **中介者(Mediator)**:定义一个接口用于与各同事对象通信。
- **具体中介者(Concrete Mediator)**:实现中介者接口,协调各同事对象的交互。
- **同事类(Colleague)**:定义一个接口,用于与中介者通信。
- **具体同事类(Concrete Colleague)**:实现同事接口,通过中介者协调与其他同事对象的交互。
### 工作原理
1. **中介者**:负责协调各同事对象的交互,知道各个同事对象,并能够了解它们的行为。
2. **同事类**:通过中介者来通信,而不是直接与其他同事对象进行交互。
3. **具体中介者**:实现协调逻辑,处理同事对象之间的通信和交互。
4. **具体同事类**:实现自己的业务逻辑,并通过中介者来处理与其他同事对象的交互。
### 优点
1. **降低耦合**:将对象之间的交互集中在中介者对象中,降低了对象之间的直接依赖。
2. **简化对象**:每个对象只需要关注自己的业务逻辑,不需要了解其他对象的实现细节。
3. **易于扩展**:可以更灵活地增加新的同事类或修改现有的交互方式。
### 示例
以下是一个简单的Python示例演示了中介者模式的实现:
# 中介者接口
class Mediator:
def send_message(self, colleague, message):
pass
# 具体中介者
class ConcreteMediator(Mediator):
def __init__(self):
self.colleague1 = Colleague1(self)
self.colleague2 = Colleague2(self)
def send_message(self, colleague, message):
if colleague == self.colleague1:
self.colleague2.receive_message(message)
else:
self.colleague1.receive_message(message)
# 同事类接口
class Colleague:
def __init__(self, mediator):
self.mediator = mediator
def send(self, message):
pass
def receive_message(self, message):
pass
# 具体同事类
class Colleague1(Colleague):
def send(self, message):
self.mediator.send_message(self, message)
def receive_message(self, message):
print("Colleague1 received message:", message)
class Colleague2(Colleague):
def send(self, message):
self.mediator.send_message(self, message)
def receive_message(self, message):
print("Colleague2 received message:", message)
# 客户端代码
mediator = ConcreteMediator()
colleague1 = Colleague1(mediator)
colleague2 = Colleague2(mediator)
colleague1.send("Hello from Colleague1")
colleague2.send("Hi from Colleague2")
在这个示例中,我们定义了中介者接口 `Mediator`,具体中介者 `ConcreteMediator`,同事类接口 `Colleague` 和具体同事类 `Colleague1` 和 `Colleague2`。中介者协调同事对象之间的交互,同事对象通过中介者来通信。
中介者模式适用于需要减少对象之间直接通信,通过一个中介者来协调对象之间交互的情况。通过中介者模式,可以降低系统的复杂度,提高代码的可维护性和灵活性。
中介者模式通过中介对象协调对象间的交互,降低耦合度,简化对象关注点。具体介绍了其结构、工作原理、优点及Python示例应用。
529

被折叠的 条评论
为什么被折叠?



