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 从远程服务器下载日志文件的程序
Feb 10 Python
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
python实现从ftp服务器下载文件
Mar 03 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
python批量生成条形码的示例
Oct 10 Python
python中用ctypes模拟点击的实例讲解
Nov 26 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
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
艾滋病宣传活动总结
2014/05/08 职场文书
消防标语大全
2014/06/07 职场文书
优秀教研组申报材料
2014/12/26 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
电视新闻稿
2015/07/17 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
Python 多线程处理任务实例
2021/11/07 Python