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详解
Feb 07 Python
Python实现的二维码生成小软件
Jul 11 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
Python反射用法实例简析
Dec 22 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
Python assert关键字原理及实例解析
Dec 13 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
基于python爬取有道翻译过程图解
Mar 31 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
python 提取html文本的方法
May 20 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
2006/10/09 PHP
PHP EOT定界符的使用详解
2008/09/30 PHP
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
PHP学习笔记之session
2018/05/06 PHP
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
django 多数据库配置教程
2018/05/30 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
正科级干部考察材料
2014/05/29 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014年民政工作总结
2014/11/26 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
2015年行政部工作总结
2015/04/28 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫