Python设计模式之门面模式简单示例


Posted in Python onJanuary 09, 2018

本文实例讲述了Python设计模式之门面模式。分享给大家供大家参考,具体如下:

facade:建筑物的表面

门面模式是一个软件工程设计模式,主要用于面向对象编程。 一个门面可以看作是为大段代码提供简单接口的对象,就像类库。

门面模式被归入建筑设计模式。门面模式隐藏系统内部的细节和复杂度,给用户提供一个简单的接口,采用门面模式,用户能够使用简单的接口进行工作,而不用担心系统的复杂。

理解门面模式最重要的一点就是它提供的简单接口是系统的一部分。因此提供简单易用的功能要胜过完整的功能。

门面模式的优点是向用户提供的基础类的操作,在当前门面模式的实现下,是不会向用户提供可控的,定制化的接口。

基于以上原因,门面模式不是对子系统的封装,而是对可选的功能提供简单的接口

下面是用块图,对门面模式的解释:

Python设计模式之门面模式简单示例

1.在块图表中,我们有将计算机分成三种类来表示:CPU,Memory,HardDrive。

cpu类有一个方法是jump()和execute(),Memory类有方法,load(),HardDrive类有一个read()方法

2.我们有个一个门面类,Computer Class ,提供start()方法给用户。

3.当用户想要开启电脑系统的时候,它调用Computer类的start()方法.
一个简单的python例子:

让我们来考虑一个测试自动化的框架,测试需要运行在特定构建类上,比如'TC1,TC2…TCn',每一个类都包涵一个方法'run()'来执行测试。

我们提供了一个门面-TestRunner-在测试类之上,作为执行测试的简单接口。以这种方式,客户不在需要担心有多少测试在执行,怎么样执行他。

TestRunner类有一个方法名runAll,是执行已经注册的所有测试。

当用户的自动框架为执行测试去构建,作为客户,他需要创建一个TestRunner类,调用runall方法,runall方法会返回创建的测试对象,

并调用他们的run 方法,这样执行了所有测试。

以下是代码:

import time
class TC1:
  def run(self):
    print "####In Test 1####"
    time.sleep(1)
    print "Setting up"
    time.sleep(1)
    print "Running test"
    time.sleep(1)
    print "Tearing down"
    time.sleep(1)
    print "Test Finished\n"
class TC2:
  def run(self):
    print "#####In Test 2 ######"
    time.sleep(1)
    print "Setting up"
    time.sleep(1)
    print "Running test"
    time.sleep(1)
    print "Tearing down"
    time.sleep(1)
    print "Test Finished\n"
class TC3:
  def run(self):
    print "#####In Test 3 ######"
    time.sleep(1)
    print "Setting up"
    time.sleep(1)
    print "Running test"
    time.sleep(1)
    print "Tearing down"
    time.sleep(1)
    print "Test Finished\n"
#Facade
class TestRunner:
  def __init__(self):
    self.tc1 = TC1()
    self.tc2 = TC2()
    self.tc3 = TC3()
  def runAll(self):
    self.tc1.run()
    self.tc2.run()
    self.tc3.run()
#Client
if __name__ == '__main__':
  testrunner = TestRunner()
  testrunner.runAll()

运行结果:

Python设计模式之门面模式简单示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
python输出当前目录下index.html文件路径的方法
Apr 28 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
python类和函数中使用静态变量的方法
May 09 Python
Python编程之序列操作实例详解
Jul 22 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
python使用多进程的实例详解
Sep 19 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 Python
python 闭包函数详细介绍
Apr 19 Python
Python和Java进行DES加密和解密的实例
Jan 09 #Python
Python设计模式之中介模式简单示例
Jan 09 #Python
python+opencv实现动态物体追踪
Jan 09 #Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 #Python
Python设计模式之代理模式简单示例
Jan 09 #Python
基于python内置函数与匿名函数详解
Jan 09 #Python
Python设计模式之工厂模式简单示例
Jan 09 #Python
You might like
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
php实现的RSS生成类实例
2015/04/23 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
JavaScript中的类继承
2010/11/25 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
遗传算法之Python实现代码
2017/10/10 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python opencv读mp4视频的实例
2018/12/07 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
学生感冒英文请假条
2014/02/04 职场文书
单位委托书格式范本
2014/09/29 职场文书
公司授权委托书格式范文
2014/10/02 职场文书