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和GO语言实现的消息摘要算法示例
Mar 10 Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
Feb 13 Python
python实现简单井字棋游戏
Mar 04 Python
python三引号如何输入
Jul 06 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 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中const与define的应用区别
2013/06/18 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python表达式的优先级详解
2020/02/18 Python
PyTorch的torch.cat用法
2020/06/28 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
类的返射机制中的包及核心类
2016/09/12 面试题
优秀教师主要事迹
2014/02/01 职场文书
承诺书样本
2014/08/30 职场文书
信仰心得体会
2014/09/05 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
红色电影观后感
2015/06/18 职场文书
实践论读书笔记
2015/06/29 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技