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中os.path用法分析
Jan 15 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
浅谈python之新式类
Aug 12 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
Django给admin添加Action的步骤详解
May 01 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
Python实现代码统计工具
Sep 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 批量生成html,txt文件的实现代码
2013/06/26 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
javascript几个易错点记录
2014/11/26 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
python中字典(Dictionary)用法实例详解
2015/05/30 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
24式加速你的Python(小结)
2019/06/13 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
如何教少儿学习Python编程
2020/07/10 Python
Python下载的11种姿势(小结)
2020/11/18 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
高级Java程序员面试要点
2013/08/02 面试题
人事档案接收函
2014/01/12 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
MySQL新手入门进阶语句汇总
2022/09/23 MySQL