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爬虫_自动获取seebug的poc实例
Aug 05 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
python中的线程threading.Thread()使用详解
Dec 17 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python中的random模块和相关函数详解
Apr 22 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的5个入手程序
2006/11/23 PHP
开发大型 PHP 项目的方法
2007/01/02 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python实现多属性排序的方法
2018/12/05 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python实现单机五子棋
2020/08/28 Python
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
小松树教学反思
2014/02/11 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
php+laravel 扫码二维码签到功能
2021/05/15 PHP
pytorch实现手写数字图片识别
2021/05/20 Python
详解Laravel制作API接口
2021/05/31 PHP
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
Java基础——Map集合
2022/04/01 Java/Android