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中的二叉树查找算法模块使用指南
Jul 04 Python
Python open()文件处理使用介绍
Nov 30 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
python实现按长宽比缩放图片
Jun 07 Python
对python 命令的-u参数详解
Dec 03 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
python使用建议技巧分享(三)
Aug 18 Python
详解python中的异常和文件读写
Jan 03 Python
python基于机器学习预测股票交易信号
May 25 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 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通用检测函数集合
2011/02/08 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python批量获取html内body内容的实例
2019/01/02 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
python实现简单图片物体标注工具
2019/03/18 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
别名指示符是什么
2012/10/08 面试题
一份创业计划书范文
2014/02/08 职场文书
前处理班长职位说明书
2014/03/01 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
助残日活动总结
2014/08/27 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
小学庆六一主持词
2015/06/30 职场文书