关闭

Python设计模式(二十)【中介模式】

标签: python设计模式
1647人阅读 评论(0) 收藏 举报
分类:

我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影。

# -*- coding: utf-8 -*-
import random
import time

class TC:
    def __init__(self):
        self._tm = None
        self._bProblem = 0

    def setup(self):
        print("设置测试")
        time.sleep(0.1)
        self._tm.prepareReporting()

    def execute(self):
        if not self._bProblem:
            print("执行测试")
            time.sleep(0.1)
        else:
            print("问题设置。测试不执行。")

    def tearDown(self):
        if not self._bProblem:
            print("拆除")
            time.sleep(0.1)
            self._tm.publishReport()
        else:
            print("测试不执行。没有拆除需要")

    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("报表类正准备报告结果")
        time.sleep(0.1)

    def report(self):
        print("报告测试的结果")
        time.sleep(0.1)

    def setTM(self, tm):
        self._tm = tm

class DB:
    def __init__(self):
        self._tm = None

    def insert(self):
        print("增加执行开始状态在数据库")
        time.sleep(0.1)
        # 下面的代码是模拟从DB到TC通信
        if random.randrange(1, 4) == 3:
            return -1

    def update(self):
        print("更新数据库中的测试结果")
        time.sleep(0.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()
        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)
    #为了简化,我们在相同的测试循环。
    #实际上,它可能是有关各种独特的测试类和它们的对象
    for i in range(3):
        tc = TC()
        tc.setTM(tm)
        tm.setTC(tc)
        tc.setup()
        tc.execute()
        tc.tearDown()

结果如图:

这里写图片描述

0
0
查看评论

大话设计模式总结3---二十三种模式

创建型模式(CreationalPatters):一共有五种,常用的有三种。 工厂方法(FactoryMethod):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个列的实例化延迟到其子类。工厂方法用一个virtual method完成创建过程。 抽象工厂(Abs...
  • xjc1278003262
  • xjc1278003262
  • 2013-04-06 09:32
  • 2640

博客专栏:二十三种设计模式之开篇

这是博主的第一篇博客,博主正在学习二十三种设计模式,用博客来记录下学习心得是判断你是否掌握一门知识最直观的方法了。 直接进入正题 设计模式的学习过程参考了以下博客:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html...
  • qq_30901199
  • qq_30901199
  • 2016-04-03 10:10
  • 394

[设计模式]二十三种设计模式

分类: DesignPattern(8)  目录(?)[+] 原文地址:http://blog.csdn.net/zhangerqing 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象...
  • qq3965470
  • qq3965470
  • 2016-08-09 23:54
  • 4961

二十三种设计模式及其python实现

本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》——http://www.cnblogs.com/...
  • zheng_lan_fang
  • zheng_lan_fang
  • 2017-08-01 18:44
  • 500

设计模式系列:中介者模式

一.引入1.案例:假设计算机1,2,3,4之间要相互通信。2.面向实现编程方案:类Computer1中要保存类Computer2、类Computer3和类Computer4实例,才能调用Computer2、Computer3、Computer4方法中的Comunicate方法。 。。。 。。。 ...
  • a910626
  • a910626
  • 2016-02-28 18:02
  • 801

设计模式(十四)中介者模式

写了很多篇设计模式的文章,才发现没有讲关于设计模式的分类,那么这一篇就补上这一内容,顺便带来中介者模式的讲解。并与此前讲过的代理模式和外观模式做对比。
  • itachi85
  • itachi85
  • 2017-03-06 12:31
  • 2259

Java 设计模式之中介者模式

本文属于23种设计模式系列,介绍中介者模式。
  • jason0539
  • jason0539
  • 2015-04-23 08:33
  • 19081

PHP设计模式——中介者模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。        中介者模式用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。  &...
  • jhq0113
  • jhq0113
  • 2015-06-09 21:40
  • 1746

浅谈设计模式之中介者模式

中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  • u014747294
  • u014747294
  • 2016-06-03 11:12
  • 1119

中介者模式及MVP、MVVM上的体现

中介者模式及MVP、MVVM上的体现中介者模式用一个中介对象封装一系列的对象交互,中介者使对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 简单的来说 就是把一个蜘蛛网的结构变为星型结构。 蜘蛛网结构星型结构 中介者模式的角色 Mediator抽象角色 ...
  • EthanCo
  • EthanCo
  • 2016-01-24 11:10
  • 1206
    个人资料
    • 访问:1301525次
    • 积分:18659
    • 等级:
    • 排名:第591名
    • 原创:312篇
    • 转载:932篇
    • 译文:123篇
    • 评论:297条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝