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通过apply使用元祖和列表调用函数实例
May 26 Python
Python编写一个闹钟功能
Jul 11 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
python实现IOU计算案例
Apr 12 Python
Django分组聚合查询实例分享
Apr 29 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
Python3压缩和解压缩实现代码
Mar 01 Python
python基础学习之递归函数知识总结
May 26 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
ThinkPHP php 框架学习笔记
2009/10/30 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
Python读取指定日期邮件的实例
2019/02/01 Python
详解重置Django migration的常见方式
2019/02/15 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
python小程序实现刷票功能详解
2019/07/17 Python
python安装后的目录在哪里
2020/06/21 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
中学生班主任评语
2014/01/30 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python