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进行文本预处理和提取特征的实例
Jun 05 Python
python实现归并排序算法
Nov 22 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
pip安装python库的方法总结
Aug 02 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
python yield关键词案例测试
Oct 15 Python
Python 中判断列表是否为空的方法
Nov 24 Python
Python列表list操作相关知识小结
Jan 29 Python
python 实现多维数组(array)排序
Feb 28 Python
python判断正负数方式
Jun 03 Python
Python是怎样处理json模块的
Jul 16 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.MVC的模板标签系统(二)
2006/09/05 PHP
PHP语法速查表
2007/01/02 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python字典简介以及用法详解
2016/11/15 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
解决Python中回文数和质数的问题
2019/11/24 Python
Python实现把类当做字典来访问
2019/12/16 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
初婚初育证明
2014/01/14 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
感恩教育主题班会
2015/08/12 职场文书
护理培训心得体会
2016/01/22 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
MySQL存储过程及语法详解
2022/08/05 MySQL