Python设计模式之中介模式简单示例


Posted in Python onJanuary 09, 2018

本文实例讲述了Python设计模式之中介模式。分享给大家供大家参考,具体如下:

Mediator Pattern:中介模式

中介模式提供了一系列统一的系统接口。此模式也被认为是行为模式,因为他能选择程序处理流程

当许多类开始在交互中产生结果时,可以选用中介模式。当软件开始组织的时候,许多用户的要求添加更多的功能。

这就导致了要和以前的类不断交互,除了新类。随着系统的复杂度加大,类之间的交互变得频繁,维护代码变得困难。

中介模式 就是为了解决这个问题,通过允许类之间的松耦合。这样中介模式就能了解系统中所有类的功能。类的功能就是与中介类进行交互。当类与类之间需要交互的时候,类就发送信息给中介,中介就转发信息给被请求的类。通过这样,类与类之间的复杂度就减少了。

一个简单的中介模式例子:

一个类型的中介模式例子可以在测试自动框架(包含4个类,TC,TestManager,Reporter ,DB)中被证明。

1.TC类是测试的响应,借助方法setup(),execute(),tearDown()。
2.Reporter类调用

当测试分类开始执行时,调用prepare方法。
当测试分类完成执行时,调用report()方法 ,
框架的测试响应就是好的帮助文档。

我也没弄懂中介模式,让人犯晕!

代码贴出来:

import time
class TC:
  def __init__(self):
    self._tm = tm
    self._bProblem = 0
  def setup(self):
    print "Setting up the Test"
    time.sleep(1)
    self._tm.prepareReporting()
  def execute(self):
    if not self._bProblem:
      print "Executing the test"
      time.sleep(1)
    else:
      print "Problem in setup,Test not executed."
  def tearDown(self):
    if not self._bProblem:
      print "Tearing down"
      time.sleep(1)
      self._tm.publishReport()
    else:
      print "Test not executed.No tear down required."
  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 "Reporter Class is preparing to report the results"
    time.sleep(1)
  def report(self):
    print "Reporting the results of Test"
    time.sleep(1)
  def setTM(self, TM):
    self._tm = tm
class DB:
  def __init__(self):
    self._tm = None
  def insert(self):
    print "Inserting the execution begin status in the Database"
    time.sleep(1)
    import random
    if random.randrange(1,4) == 3:
      return -1
  def update(self):
    print "Updating the test results in Database"
    time.sleep(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()
    rvalue = 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)
  while(1):
    tc = TC()
    tc.setTM(tm)
    tm.setTC(tc)
    tc.setup()
    tc.execute()
    tc.tearDown()

运行结果:

Python设计模式之中介模式简单示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python使用win32com在百度空间插入html元素示例
Feb 20 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
Python中的TCP socket写法示例
May 11 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
Python闭包函数定义与用法分析
Jul 20 Python
python中字符串内置函数的用法总结
Sep 13 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
python如何实现一个刷网页小程序
Nov 27 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
python+opencv实现动态物体追踪
Jan 09 #Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 #Python
Python设计模式之代理模式简单示例
Jan 09 #Python
基于python内置函数与匿名函数详解
Jan 09 #Python
Python设计模式之工厂模式简单示例
Jan 09 #Python
浅谈numpy库的常用基本操作方法
Jan 09 #Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 #Python
You might like
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
linux下编译安装memcached服务
2014/08/03 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
python 根据pid杀死相应进程的方法
2017/01/16 Python
Python MD5加密实例详解
2017/08/02 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Django实现文件上传下载
2019/10/06 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
信息管理专业推荐信
2013/10/29 职场文书
星级党支部申报材料
2014/05/31 职场文书
路政管理求职信
2014/06/18 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书