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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
python中字符串内置函数的用法总结
Sep 13 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
python如何删除列为空的行
Jul 17 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
python 如何设置守护进程
Oct 29 Python
python二维图制作的实例代码
Dec 03 Python
Python jiaba库的使用详解
Nov 23 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答题类应用接口实例
2015/02/09 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
PHP钩子实现方法解析
2019/05/21 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中的is和id用法分析
2015/01/26 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python实现简单flappy bird
2018/12/24 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
C# .NET面试题
2015/11/28 面试题
关于祖国的演讲稿
2014/05/04 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
助学金感谢信
2015/01/20 职场文书
2015年暑假工作总结
2015/07/13 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
学习nginx基础知识
2021/09/04 Servers
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python