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中命名空间的查找规则LEGB
Aug 06 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
python实现简易数码时钟
Feb 19 Python
Python使用字典的嵌套功能详解
Feb 27 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
python 等差数列末项计算方式
May 03 Python
python网络编程之五子棋游戏
May 14 Python
Django模板获取field的verbose_name实例
May 19 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
分析python切片原理和方法
2017/12/19 Python
使用python实现BLAST
2018/02/12 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
2014年度思想工作总结
2014/11/27 职场文书
污染环境建议书
2015/09/14 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers