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实现网络测试的脚本分享
May 26 Python
Python实现excel转sqlite的方法
Jul 17 Python
python实现对csv文件的列的内容读取
Jul 04 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python队列、进程间通信、线程案例
Oct 25 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 Python
python中执行smtplib失败的处理方法
Jul 01 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
利用Python将图片中扭曲矩形的复原
Sep 07 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 MSSQL 存储过程的方法
2008/12/24 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
竞选班委演讲稿
2014/04/28 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
环卫工人慰问信
2015/02/15 职场文书
自主招生自荐信范文
2015/03/04 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
MySQL中order by的使用详情
2021/11/17 MySQL