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程序中使用Cookie的教程
Apr 30 Python
python根据京东商品url获取产品价格
Aug 09 Python
python中lambda()的用法
Nov 16 Python
python随机取list中的元素方法
Apr 08 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
浅析Python函数式编程
Oct 06 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
如何在Django配置文件里配置session链接
Aug 06 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
浅谈keras中loss与val_loss的关系
Jun 22 Python
用Python提取PDF表格的方法
Apr 11 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
ADODB类使用
2006/11/25 PHP
PHP防注入安全代码
2008/04/09 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
大学生工作推荐信范文
2013/12/02 职场文书
后勤部长岗位职责
2013/12/14 职场文书
新学期班主任寄语
2014/01/18 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
企业挂职心得体会
2014/09/10 职场文书
单位租房协议书范本
2014/12/04 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
诚信教育主题班会
2015/08/13 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书