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 将字符串转换成字典dict
Mar 24 Python
深入理解Python中的元类(metaclass)
Feb 14 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
python基础教程之五种数据类型详解
Jan 12 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
django 控制页面跳转的例子
Aug 06 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
pandas的resample重采样的使用
Apr 24 Python
Python Switch Case三种实现方法代码实例
Jun 18 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
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
Collection和Collections的区别
2016/05/02 面试题
火山动力Java笔试题
2014/06/26 面试题
中层竞聘演讲稿
2014/01/09 职场文书
加拿大留学自荐信
2014/01/28 职场文书
给面试官的感谢信
2014/02/01 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
法人代表任命书范本
2014/06/05 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
高考升学宴答谢词
2015/01/20 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
护士实习自荐信
2015/03/06 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
MySQL中varchar和char类型的区别
2021/11/17 MySQL