You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
3.2 KiB

8 months ago
'''
中介者模式Mediator Pattern是一种行为型设计模式它定义了一个中介对象来封装一系列对象之间的交互
中介者使各对象不需要显式地相互引用从而使其耦合松散而且可以独立地改变它们之间的交互
设想书店管理系统其中包含了多个组件比如库存管理订单处理顾客管理等
这些组件之间需要相互通信来协同工作我们可以使用中介者模式来减少这些组件之间的直接依赖
在这个示例中BookstoreMediator 充当了中介者的角色它协调了库存管理订单处理和顾客管理之间的交互
当某个事件发生时比如顾客下订单相应的组件会通过中介者发送通知中介者再根据事件类型协调其他组件的响应
'''
from abc import ABC, abstractmethod
#定义一个中介者接口和具体的中介者实现
# 中介者接口
class Mediator(ABC):
@abstractmethod
def notify(self, sender, event):
pass
# 具体的中介者实现
class BookstoreMediator(Mediator):
def __init__(self, inventory, order, customer):
self.inventory = inventory
self.order = order
self.customer = customer
def notify(self, sender, event):
if event == 'book_ordered':
print("BookstoreMediator: Order notification received. Checking inventory...")
if self.inventory.has_stock():
print("BookstoreMediator: Inventory has stock. Processing order...")
self.order.process_order()
self.customer.notify_order_success()
else:
print("BookstoreMediator: Inventory out of stock. Cancelling order...")
self.order.cancel_order()
self.customer.notify_order_failure()
# 可以添加更多的事件处理逻辑
# 库存管理组件
class Inventory:
def has_stock(self):
# 这里简化逻辑,直接返回有库存
return True
# 订单处理组件
class Order:
def process_order(self):
print("Order: Order is being processed...")
def cancel_order(self):
print("Order: Order is being cancelled...")
# 顾客管理组件
class Customer:
def notify_order_success(self):
print("Customer: Order successful. Notifying customer...")
def notify_order_failure(self):
print("Customer: Order failed. Notifying customer...")
# 组件之间的交互通过中介者进行
class BookstoreComponent:
def __init__(self, mediator):
self.mediator = mediator
def send_notification(self, event):
self.mediator.notify(self, event)
# 示例使用
if __name__ == "__main__":
# 创建组件
inventory = Inventory()
order = Order()
customer = Customer()
# 创建中介者并注入组件
mediator = BookstoreMediator(inventory, order, customer)
# 创建与中介者关联的书店组件(这里以订单为例)
order_component = BookstoreComponent(mediator)
# 触发事件(比如:下订单)
order_component.send_notification('book_ordered')