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 05 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
浅谈Python 中整型对象的存储问题
May 16 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 Python
pandas求平均数和中位数的方法实例
Aug 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引用效率问题分析
2012/03/23 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
JS求解两数之和算法详解
2020/04/28 Javascript
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
简单了解Python中的几种函数
2017/11/03 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
pandas参数设置的实用小技巧
2020/08/23 Python
Python类型转换的魔术方法详解
2020/12/23 Python
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
大学生毕业求职信
2014/06/12 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
会计专业求职信
2014/08/10 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS