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来编写HTTP服务器的超级指南
Feb 18 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
python获取array中指定元素的示例
Nov 26 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 Python
Python加密技术之RSA加密解密的实现
Apr 08 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入门速成教程
2007/03/19 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
python构建自定义回调函数详解
2017/06/20 Python
Python中断多重循环的思路总结
2019/10/04 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
几个MySql的面试题
2013/04/22 面试题
医大实习自我鉴定
2013/12/07 职场文书
会计电算化应届生自荐信
2014/02/25 职场文书
保险公司早会主持词
2014/03/22 职场文书
2014年党小组工作总结
2014/12/20 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
党支部考察意见范文
2015/06/02 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
MySQL分区表管理命令汇总
2022/03/21 MySQL
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python