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中字典的合并值相加与异或对比
Jun 04 Python
win7上python2.7连接mysql数据库的方法
Jan 14 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
python调用百度语音REST API
Aug 30 Python
利用python修改json文件的value方法
Dec 31 Python
python调用webservice接口的实现
Jul 12 Python
基于Python中的yield表达式介绍
Nov 19 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
Anaconda使用IDLE的实现示例
Sep 23 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
用python批量解压带密码的压缩包
May 31 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中调用JAVA
2006/10/09 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
javascript数组拍平方法总结
2018/01/20 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
教师党员承诺书
2014/03/25 职场文书
《菜园里》教学反思
2014/04/17 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
初中政治教学工作总结
2015/08/13 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫