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 相关文章推荐
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
python实现电子产品商店
Feb 26 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python删除某个目录文件夹的方法
May 26 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
python中的垃圾回收(GC)机制
Sep 21 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 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结合飞信 免费天气预报短信
2009/05/07 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
两款万能的php分页类
2015/11/12 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
IE php关于强制下载文件的代码
2008/08/23 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
用实例分析Python中method的参数传递过程
2015/04/02 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
详解python中index()、find()方法
2019/08/29 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python实现石头剪刀布游戏
2021/01/20 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
电视购物广告词
2014/03/19 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
如何理解PHP核心特性命名空间
2021/05/28 PHP
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS