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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
对Python3中的input函数详解
Apr 22 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
超简单的Python HTTP服务
Jul 22 Python
python绘制无向图度分布曲线示例
Nov 22 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python生成pdf目录书签的实例方法
Oct 29 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
推荐文章系统(一)
2006/10/09 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python科学画图代码分享
2017/11/29 Python
Python 查看文件的编码格式方法
2017/12/21 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
Python中的heapq模块源码详析
2019/01/08 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
迎国庆演讲稿
2014/09/15 职场文书
交通事故委托书范本
2014/09/28 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏