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中集合的内建函数和内建方法学习教程
Aug 19 Python
python中的错误处理
Apr 10 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
python队列queue模块详解
Apr 27 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
Python实现Dijkstra算法
Oct 17 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
基于Django快速集成Echarts代码示例
Dec 01 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数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
Python+Opencv识别两张相似图片
2020/03/23 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python八皇后问题的解决方法
2018/09/27 Python
Python实现常见的回文字符串算法
2018/11/14 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
安全检查验收制度
2014/01/12 职场文书
国家助学金获奖感言
2014/01/31 职场文书
企业精神口号
2014/06/11 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
校园运动会广播稿
2014/10/06 职场文书
师德师风学习材料
2014/12/19 职场文书
租车协议书
2015/01/27 职场文书
网吧员工管理制度
2015/08/05 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python