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实现字典的key和values的交换
Aug 04 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Django中URL的参数传递的实现
Aug 04 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
python 字典的打印实现
Sep 26 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
python绘制动态曲线教程
Feb 24 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
pycharm Tab键设置成4个空格的操作
Feb 26 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 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封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python计算对角线有理函数插值的方法
2015/05/07 Python
Python 装饰器使用详解
2017/07/29 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
浅析Python __name__ 是什么
2020/07/07 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
实习生自荐信范文分享
2013/11/27 职场文书
2014新年寄语
2014/01/20 职场文书
精彩的英文自荐信
2014/01/30 职场文书
学校文明单位申报材料
2014/05/06 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
离婚协议书范文
2015/01/26 职场文书
党员转正党支部意见
2015/06/02 职场文书
小平小道观后感
2015/06/09 职场文书
Java实现给Word文件添加文字水印
2022/02/15 Java/Android