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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
python基本语法练习实例
Sep 19 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Python中turtle库的使用实例
Sep 09 Python
如何在python中实现随机选择
Nov 02 Python
对python中assert、isinstance的用法详解
Nov 27 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
django日志默认打印request请求信息的方法示例
May 17 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php实现分页显示
2015/11/03 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
使用JavaScript破解web
2018/09/28 Javascript
python抓取百度首页的方法
2015/05/19 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Python入门之后再看点什么好?
2018/03/05 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Python内置加密模块用法解析
2019/11/25 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python 下载文件的多种方法汇总
2020/11/17 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
出国留学介绍信
2014/01/13 职场文书
学校岗位设置方案
2014/01/16 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
2015年教务工作总结
2015/05/23 职场文书
2015年测量员工作总结
2015/05/23 职场文书
患者身份识别制度
2015/08/06 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL