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写的windows服务不能启动的问题
Apr 15 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
视觉直观感受若干常用排序算法
Apr 13 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
详解python3中zipfile模块用法
Jun 18 Python
python3 反射的四种基本方法解析
Aug 26 Python
python内置模块collections知识点总结
Dec 19 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
pytorch DataLoader的num_workers参数与设置大小详解
May 28 Python
详解Python+OpenCV进行基础的图像操作
Feb 15 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP单例模式详细介绍
2015/07/01 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
Python WEB应用部署的实现方法
2019/01/02 Python
python list转置和前后反转的例子
2019/08/26 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
优秀学生干部个人的自我评价
2013/10/04 职场文书
酒店led欢迎词
2014/01/09 职场文书
家长对学生的评语
2014/04/18 职场文书
爱心活动计划书
2014/04/26 职场文书
老公给老婆的保证书
2014/04/28 职场文书
三好生演讲稿
2014/09/12 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang