赞
踩
第一章 前言
第二章 观察者模式
第三章 状态模式
第四章 中介模式
第五章 装饰器模式
第六章 单例模式
第七章 克隆模式
第八章 职责链模式
第九章 代理模式
第十章 外观模式
第十一章 迭代模式
第十二章 组合模式
第十三章 构建模式
第十四章 适配模式
第十五章 策略模式
第十六章 简单工厂模式
第十七章 工厂方法模式
第十八章 抽象工厂模式
第十九章 命令模式
第二十章 备忘录模式
第二十一章 享元模式
第二十二章 访问模式
第二十三章 模板模式
第二十四章 桥接模式
第二十五章 解释器模式
第二十六章 过滤器模式
第二十七章 对象池技术
第二十八章 回调机制
第二十九章 MVC模式
附录
注1
由中介来承接房客与房东之间的交互过程,可以使得整个租房过程更加畅通、高效。这在程序中叫作中介模式,中介模式又称为调停模式。
在很多系统中,多个类很容易相互耦合,形成网状结构。中介模式的作用就是将这种网状结构分离成星型结构。经过这样的调整后,对象之间的结构更加简洁,交互更加顺畅。
from abc import ABC, abstractmethod import sys from typing import Any class InteractiveObject(ABC): def __init__(self, mediator) -> None: self._mediator = mediator class InteracivaObjectImplA(InteractiveObject): def send(self, message:Any): print(f"{self.__class__.__name__}/{sys._getframe().f_code.co_name}") print("----{} send message:'{}' to {}".format(self.__class__.__name__, message, self._mediator.__class__.__name__)) self._mediator.send(message, self) def notify(self, message): print(f"{self.__class__.__name__}/{sys._getframe().f_code.co_name}") print("----{} received mesage:'{}'".format(self.__class__.__name__, message)) class InteracivaObjectImplB(InteractiveObject): def send(self, message:Any): print(f"{self.__class__.__name__}/{sys._getframe().f_code.co_name}") print("----{} send message:'{}' to {}".format(self.__class__.__name__, message, self._mediator.__class__.__name__)) self._mediator.send(message, self) def notify(self, message): print(f"{self.__class__.__name__}/{sys._getframe().f_code.co_name}") print("----{} received mesage:'{}'".format(self.__class__.__name__, message)) class AbstractMediator(ABC): @abstractmethod def send(self, message:Any, interactivObject: InteractiveObject): pass class Mediator(AbstractMediator): def setInteractiveObjectImplA(self, interactiveObjectImplA): self.interactiveObjectImplA = interacivaObjectImplA def setInteractiveObjectImplB(self, interactiveObjectImplB): self.interactiveObjectImplB = interacivaObjectImplB def send(self, message: Any, interactiveObject: InteractiveObject): print(f"{self.__class__.__name__}/{sys._getframe().f_code.co_name}") if interactiveObject ==self.interactiveObjectImplA: print("----{} receive message:'{}' from {} and send to {}".format(self.__class__.__name__, message, interactiveObject.__class__.__name__, self.interactiveObjectImplB.__class__.__name__)) self.interactiveObjectImplB.notify(message) else: print("----{} receive message:'{}' from {} and send to {}".format(self.__class__.__name__, message, interactiveObject.__class__.__name__, self.interactiveObjectImplA.__class__.__name__)) self.interactiveObjectImplA.notify(message) if __name__ == "__main__": mediator = Mediator() # 交互对象认识中介对象 interacivaObjectImplA=InteracivaObjectImplA(mediator) interacivaObjectImplB=InteracivaObjectImplB(mediator) # 中介对象认识每个交互对象 mediator.setInteractiveObjectImplA(interacivaObjectImplA) mediator.setInteractiveObjectImplB(interacivaObjectImplB) # 交互对象A和交互对象B通过中介对象交流 interacivaObjectImplA.send("Have you eaten dinner?") interacivaObjectImplB.send("Not yet, do you want to invite me?")
中介模式主要有以下三个角色,在设计中介模式时要找到并区分这些角色:
优点
缺点
[1]程杰.大话数据模式[M].北京:清华大学出版社,2007.
[2]罗伟富.人人都懂设计模式:从生活中领悟设计模式:Python实现[M].北京:电子工业出版社,2019.
本文为书籍《大话数据模式》和《人人都懂设计模式:从生活中领悟设计模式:Python实现》阅读笔记 ↩︎
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。