Python设计模式(二十)【中介模式】

【Python】Python设计模式 Python语言本身的设计,就已经蕴含了许多设计模式的思想。在我们学习具体模式之前,认识到这些语言层面的“内建模式”至关重要,因为它们往往是解决特定问题的首选方案。装饰器 (Decorators): 这是对经典装饰器模式 (Decorator Pattern) 和 代理模式 (Proxy Pattern) 的直接语法级支持。它允许我们以一种声明式、非侵入的方式,为函数或类附加额外的职责,如日志记录、性能测试、事务处理、权限校验等。上下文管理器 (Context Managers): 语句和、方法,是资源管理 阅读详情

我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影。

# -*- coding: utf-8 -*-
import random
import time

class TC:
    def __init__(self):
        self._tm = None
        self._bProblem = 0

    def setup(self):
        print("设置测试")
        time.sleep(0.1)
        self._tm.prepareReporting()

    def execute(self):
        if not self._bProblem:
            print("执行测试")
            time.sleep(0.1)
        else:
            print("问题设置。测试不执行。")

    def tearDown(self):
        if not self._bProblem:
            print("拆除")
            time.sleep(0.1)
            self._tm.publishReport()
        else:
            print("测试不执行。没有拆除需要")

    def setTM(self, tm):
        self._tm = tm

    def setProblem(self, value):
        self._bProblem = value

class Reporter:
    def __init__(self):
        self._tm = None

    def prepare(self):
        print("报表类正准备报告结果")
        time.sleep(0.1)

    def report(self):
        print("报告测试的结果")
        time.sleep(0.1)

    def setTM(self, tm):
        self._tm = tm

class DB:
    def __init__(self):
        self._tm = None

    def insert(self):
        print("增加执行开始状态在数据库")
        time.sleep(0.1)
        # 下面的代码是模拟从DB到TC通信
        if random.randrange(1, 4) == 3:
            return -1

    def update(self):
        print("更新数据库中的测试结果")
        time.sleep(0.1)

    def setTM(self, tm):
        self._tm = tm

class TestManager:

    def __init__(self):
        self._reporter = None
        self._db = None
        self._tc = None

    def prepareReporting(self):
        rvalue = self._db.insert()
        if rvalue == -1:
            self._tc.setProblem(1)
            self._reporter.prepare()

    def setReporter(self, reporter):
        self._reporter = reporter

    def setDB(self, db):
        self._db = db

    def publishReport(self):
        self._db.update()
        self._reporter.report()

    def setTC(self, tc):
        self._tc = tc

if __name__ == '__main__':
    reporter = Reporter()
    db = DB()
    tm = TestManager()
    tm.setReporter(reporter)
    tm.setDB(db)
    reporter.setTM(tm)
    db.setTM(tm)
    #为了简化,我们在相同的测试循环。
    #实际上,它可能是有关各种独特的测试类和它们的对象
    for i in range(3):
        tc = TC()
        tc.setTM(tm)
        tm.setTC(tc)
        tc.setup()
        tc.execute()
        tc.tearDown()

结果如图:

这里写图片描述

Python设计模式之中介模式简单示例 本文实例讲述了Python设计模式之中介模式。分享给大家供大家参考,具体如下: Mediator Pattern:中介模式 中介模式提供了一系列统一的系统接口。此模式也被认为是行为模式,因为他能选择程序处理流程。 当许多类开始在交互中产生结果时,可以选用中介模式。当软件开始组织的时候,许多用户的要求添加更多的功能。 这就导致了要和以前的类不断交互,除了新类。随着系统的复杂度加大,类之间的交互变得频繁,维护代码变得困难。 中介模式 就是为了解决这个问题,通过允许类之间的松耦合。这样中介模式就能了解系统中所有类的功能。类的功能就是与中介类进行交互。当类与类之间需要交互的时候,类就发送信息给中介,中 立即下载

相关推荐

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 449

Python中介者模式介绍、使用

Python中介者模式是一种行为型设计模式,它允许多个对象之间进行通信而不必直接相互引用。在这种模式中,一个中介者对象控制多个对象之间的通信,从而减少对象之间的耦合度。将对象间的复杂关系转换为中介者与对象之间的简单关系;降低系统的耦合度,使得对象之间可以独立地变化;促进对象之间的协作和沟通,提高系统的可维护性和可扩展性。可以降低对象之间的耦合度,减少代码重复;可以实现对象间的松耦合,使得系统的扩展和维护更加容易;可以提高系统的灵活性,使得系统更易于协作和沟通。

captain 732

STM32串口调试踩坑记:HAL_UART_ErrorCallback里不先解锁,你的中断接收就废了

本文深入分析了STM32串口调试中HAL_UART_ErrorCallback的锁机制陷阱,指出在错误回调中不先解锁会导致中断接收失效的问题。通过解析HAL库源码,提出了正确的错误处理实现方法,并分享了预防措施与最佳实践,帮助开发者提升串口通信的可靠性。

weixin_33733810的博客 512

Python设计模式详解之17 —— 中介者模式

Mediator(中介者)设计模式 是一种行为型设计模式,用于通过一个中介对象封装一组对象之间的交互,简化复杂的对象之间的依赖关系。它的目标是减少对象之间的直接耦合,使系统更加灵活和可维护。 在 Python 中,Mediator 模式 通常通过一个专门的中介类管理多个组件的交互。这些组件通过中介者传递消息,而不是直接引用彼此。

拾工 491

KIBANA可视化管理界面说明

更说明转自https://blog.youkuaiyun.com/IT_ZRS/article/details/125496588 1 主要结构功能 使用浏览器访问 ip:5601 默认端口,进入首页 Discover:日志管理视图 主要进行搜索和查询 Visualize:统计视图 构建可视化的图表 Dashboard:仪表视图 将构建的图表组合形成图表盘 Timelion:时间轴视图 随着时间流逝的数据 APM:性能管理视图 应用程序的性能管理系统 Canvas:大屏展示

tian830937的专栏 7081

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 668

Python讲解:中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介对象来封装一系列对象之间的交互。中介者使各对象不需要显式地相互引用,从而降低了它们之间的耦合度,并且可以独立地改变它们之间的交互方式。假设我们正在开发一个简单的聊天应用程序,其中包含多个用户。为了实现用户之间的消息传递,我们可以利用中介者模式来管理这些通信。首先,我们需要定义一个通用的同事类接口,所有参与者都将实现这个接口: 步骤二:创建具体同事类 接下来,为每个具体的参与者创建具体同事类: 步骤三:定义中介者接口 然后,

软件架构师笔记 1003

【阅读文献笔记】FoundationStereo: Zero-Shot Stereo Matching

提出首个零样本泛化立体匹配基础模型设计 STA 模块融合单目先验提出 AHCF 模块增强代价滤波构建 100 万合成数据集 FSD + 自净化流程。

qq_46460379的博客 1257

【Python笔记-设计模式】中介者模式

设计模式,Python语言描述,中介者模式

木子家有小可爱的博客 1356

实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事

本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。

weixin_33720078的博客 440

ESP32-S3驱动PCA9685模块:I2C扩展16路舵机控制实战指南

本文提供了ESP32-S3通过I2C总线驱动PCA9685模块扩展16路PWM输出的完整实战指南。详细解析了PCA9685模块原理、硬件连接、I2C地址配置,并给出了核心驱动代码与角度控制函数,帮助开发者解决微控制器PWM引脚不足的问题,轻松实现多路舵机控制。

weixin_32005771的博客 514

设计模式Python版 中介者模式

介绍了GOF设计模式中的中介者模式,以及用Python实现中介者模式的示例。

分享、交流、合作 1430

OpenCV计算机视觉实战(3)——计算机图像处理基础

本文全面介绍了计算机视觉和数字图像处理的基础知识。从最基本的像素概念入手,详细讲解了图像在计算机中的表示方式,包括RGB、CMYK等色彩空间的工作原理及其应用场景。还系统分析了常见图像和视频文件格式的特点,梳理了计算机图像处理技术的发展历程,并重点介绍了OpenCV这一强大的开源计算机视觉库的功能与应用领域。

qq_30167691的博客 1738

python为语言的设计模式

摘录自 http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html 一、简单工厂模式 模式特点:工厂根据条件产生不同功能的类。 程序实例:四则运算计算器,根据用户的输入产生相应的运算类,用这个运算类处理具体的运算。 代码特点:C/C++中的switch...case...分支使用字典的方式代替。...

DELL851314的博客 199

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式:第四章 中介模式

第四章 中介模式1. 核心思想2. UML类图3. 代码框架4. 模型说明4.1 设计要点4.2 优缺点5. 应用场景 注1 1. 核心思想 由中介来承接房客与房东之间的交互过程,可以使得整个租房过程更加畅通、高效。这在程序中叫作中介模式,中介模式又称为调停模式。 在很多系统中,多个类很容易相互耦合,形成网状结构。中介模式的作用就是将这种网状结构分离成星型结构。经过这样的调整后,对象之间的结构更加简洁,交互更加顺畅。 2. UML类图 3. 代码框架 from abc import ABC, abs.

追梦的土豆的博客 978

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目 项目介绍 该项目由 Github 用户 micooz 维护,是针对软件开发中常见设计模式的实现集合。它旨在提供一个学习和理解各种设计模式的实战平台,涵盖了从单例模式到观察者模式等二十多种经典设计模式。通过此仓库,开发者可以深入学习每种模式的概念、应用场景及其实现细节,助力提升代码质量和可维护性。 项目快速启动 环境要求...

gitblog_00751的博客 818

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

二十三种设计模式及其python实现

二十三种设计模式及其python实现 本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》——http://www.cnblogs.com/beijiguangyong/ 设计模式是什么? ...

weixin_42575593的博客 173

设计模式python实现-二十三种设计模式 python实现

设计模式是什么?设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不...

weixin_39839410的博客 174

python设计模式六大原则_二十三种设计模式-六大原则

一、二十三种设计模式1、创建型:单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式;2、结构型:代理模式,装饰器模式、适配器模式、外观模式、组合模式、享元模式、桥梁模式;3、行为型:策略模式、责任链模式、命令模式、中介者模式、模板方法模式、迭代器模式、访问者模式、观察者模式、解释器模式、备忘录模式、状态模式。4、三类设计模式的特点:二、六大原则1、开放封闭(简称开闭)原则Open-Close ...

weixin_39632327的博客 195

Python基础之七大设计原则&二十四种设计模式

Python七大原则&24种设计模式 七大设计原则: 1、单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:一个类负责一项职责. 2、里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】:继承与派生的规则.(子类可替换父类) 3、依赖倒转原则【DEPENDENCE INVERSION PRINCIPLE】:高层模块不应该依赖低层模块,二者...

Python打杂工程师 379

【新人系列】Python 入门(二十六):常见设计模式

提高代码可重用性(重点)提供代码的扩展性(重点)提高可读性提高软件的性能、效率提高代码的维护性。

Newin2020的博客 1489

Python的二十三种设计模式实现(详细案例)

本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》——http://www.cnblogs.com/beijiguangyong/ 设计模式是什么? 设计模式是经过总结、优化的,对我们经常...

u011342224的博客 1302
上一篇: Python设计模式(十九)【图搜索模式】
下一篇: Python设计模式(二十一)【备忘录模式】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值