Autumn SALE
中介者

Python 中介者模式讲解和代码示例

中介者是一种行为设计模式 让程序组件通过特殊的中介者对象进行间接沟通 达到减少组件之间依赖关系的目的

中介者能使得程序更易于修改和扩展 而且能更方便地对独立的组件进行复用 因为它们不再依赖于很多其他的类

复杂度

流行度

使用示例 中介者模式在 Python 代码中最常用于帮助程序 GUI 组件之间的通信 在 MVC 模式中 控制器是中介者的同义词

概念示例

本例说明了中介者设计模式的结构并重点回答了下面的问题

  • 它由哪些类组成
  • 这些类扮演了哪些角色
  • 模式中的各个元素会以何种方式相互关联

main.py: 概念示例

from __future__ import annotations from abc import ABC class Mediator(ABC): """ The Mediator interface declares a method used by components to notify the mediator about various events. The Mediator may react to these events and pass the execution to other components. """ def notify(self, sender: object, event: str) -> None: pass class ConcreteMediator(Mediator): def __init__(self, component1: Component1, component2: Component2) -> None: self._component1 = component1 self._component1.mediator = self self._component2 = component2 self._component2.mediator = self def notify(self, sender: object, event: str) -> None: if event == "A": print("Mediator reacts on A and triggers following operations:") self._component2.do_c() elif event == "D": print("Mediator reacts on D and triggers following operations:") self._component1.do_b() self._component2.do_c() class BaseComponent: """ The Base Component provides the basic functionality of storing a mediator's instance inside component objects. """ def __init__(self, mediator: Mediator = None) -> None: self._mediator = mediator @property def mediator(self) -> Mediator: return self._mediator @mediator.setter def mediator(self, mediator: Mediator) -> None: self._mediator = mediator """ Concrete Components implement various functionality. They don't depend on other components. They also don't depend on any concrete mediator classes. """ class Component1(BaseComponent): def do_a(self) -> None: print("Component 1 does A.") self.mediator.notify(self, "A") def do_b(self) -> None: print("Component 1 does B.") self.mediator.notify(self, "B") class Component2(BaseComponent): def do_c(self) -> None: print("Component 2 does C.") self.mediator.notify(self, "C") def do_d(self) -> None: print("Component 2 does D.") self.mediator.notify(self, "D") if __name__ == "__main__": # The client code. c1 = Component1() c2 = Component2() mediator = ConcreteMediator(c1, c2) print("Client triggers operation A.") c1.do_a() print("\n", end="") print("Client triggers operation D.") c2.do_d() 

Output.txt: 执行结果

Client triggers operation A. Component 1 does A. Mediator reacts on A and triggers following operations: Component 2 does C. Client triggers operation D. Component 2 does D. Mediator reacts on D and triggers following operations: Component 1 does B. Component 2 does C. 

中介者在其他编程语言中的实现

C# 中介者模式讲解和代码示例 C++ 中介者模式讲解和代码示例 Go 中介者模式讲解和代码示例 Java 中介者模式讲解和代码示例 PHP 中介者模式讲解和代码示例 Ruby 中介者模式讲解和代码示例 Rust 中介者模式讲解和代码示例 Swift 中介者模式讲解和代码示例 TypeScript 中介者模式讲解和代码示例