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 相关文章推荐
python模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
在python中的socket模块使用代理实例
May 29 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
Python实现Const详解
Jan 27 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
基于python监控程序是否关闭
Jan 14 Python
django 扩展user用户字段inlines方式
Mar 30 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
python实现简单遗传算法
Sep 18 Python
Python非单向递归函数如何返回全部结果
Dec 18 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下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
javascript实用方法总结
2015/02/06 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
详解vuex的简单使用
2018/03/12 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python Requests 基础入门
2016/04/07 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python tkinter模版代码实例
2020/02/05 Python
导致python中import错误的原因是什么
2020/07/01 Python
python如何调用百度识图api
2020/09/29 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
寒假家长评语大全
2014/04/16 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python