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解析xml模块封装代码
Feb 07 Python
Python 的 Socket 编程
Mar 24 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
Python中pygame安装方法图文详解
Nov 11 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
Django中modelform组件实例用法总结
Feb 10 Python
基于Python把网站域名解析成ip地址
May 25 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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 UTF8 文件的签名问题
2009/10/30 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
python脚本内运行linux命令的方法
2015/07/02 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
python抽取指定url页面的title方法
2018/05/11 Python
Python单元测试实例详解
2018/05/25 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python输出指定字符串的方法
2020/02/06 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
关于元旦的广播稿
2014/02/16 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
十七岁的单车观后感
2015/06/12 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python