facade:建筑物的表面
门面模式是一个软件工程设计模式,主要用于面向对象编程。 一个门面可以看作是为大段代码提供简单接口的对象,就像类库。
 
门面模式被归入建筑设计模式。门面模式隐藏系统内部的细节和复杂度,给用户提供一个简单的接口,采用门面模式,用户能够使用简单的接口进行工作,而不用担心系统的复杂。
理解门面模式最重要的一点就是它提供的简单接口是系统的一部分。因此提供简单易用的功能要胜过完整的功能。
 
门面模式的优点是向用户提供的基础类的操作,在当前门面模式的实现下,是不会向用户提供可控的,定制化的接口。
基于以上原因,门面模式不是对子系统的封装,而是对可选的功能提供简单的接口
 
下面是用块图,对门面模式的解释:
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()
 
 
 

最新文章

  1. C# 生成xml文件
  2. 一般处理程序返回json
  3. linux(centos 6.4)下安装php memcache服务端及其客户端(详细教程)
  4. Nodejs学习笔记(三)--- 模块
  5. Oracle性能优化--AUTOTRACE 操作
  6. 二模09day1解题报告
  7. Android:开发环境
  8. $( ).focus()与$( )[0].focus()区别
  9. RocketMQ常用命令
  10. IOS 学习日志 2015-3-16
  11. 一个JAVA代码
  12. 基于visual Studio2013解决C语言竞赛题之1075大数阶乘
  13. Android项目包装apk和apk反编译,xml反编译
  14. 2.Add Two Numbers-两个单链表相加
  15. 基于canvas的二维码邀请函生成插件
  16. dfs 无向图两节点间的所有路径
  17. C# servicestack.redis 互通 java jedis
  18. struts2(五)之struts2拦截器与自定义拦截器
  19. http协议中302和303的区别
  20. TestFlight的使用--再也不用担心环境打错了

热门文章

  1. 平衡树 - Luogu 1486 郁闷的出纳员
  2. Windows Server 2012之活动目录域服务的卸载
  3. leetcode 【 Best Time to Buy and Sell Stock 】python 实现
  4. Redis的 SORT命令
  5. c++面试须知
  6. 【转】Unity3D 入门小技巧——鼠标拾取并移动物体
  7. git版本控制的常用指令
  8. HDU 5289 Assignment(二分+RMQ-ST)
  9. JMeter 性能测试进阶实战
  10. cocoapods的安装使用