注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

LabATSS

关注自动测试软件

 
 
 

日志

 
 

LabVIEW面向对象设计模式学习之四:装饰模式  

2011-11-09 20:20:39|  分类: LabVIEW |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Intent(意图)

动态的扩展一个具体对象的责任,扩展一个已存在的类并且不需要重新编写原有已符合测试的类代码。

别名:包装类(Wrapper)

Motivation(动机)

装饰模式是当为应用程序增加一个新的特性时,避免修改已经测试通过的源代码,这个设计模式提供了扩展对象功能而无需改编类原有行为的方法。另外该模式也提供解决如何定义具备在一系列多种排列组合责任类的问题。装饰模式创建了一个扩展和递归调用的机制,从而在将来具备重新设置和扩展的能力。

Implementation(实现)

这个例程使用咖啡店来进行说明:如你可能要一杯黑咖啡,并且想混加入双份摩卡(Mocha)和奶泡(Whipped)调料,装饰模式可以用来替代定义一组n!多个子类来满足每种可能类型的饮料(摩卡黑咖啡、奶泡黑咖啡等),只是定义每种饮料的子类和调料(condiment),而香料的每个子类都包含一个其他类型(饮料)并且共享着一样的方法列表,当一个方法被对象调用时,该对象首先调用其包含的对象的同名方法,然后再附加自己的数据和输出组成该方法的最终输出给客户。 

这个应用程序例子也可以看做是作为一个新特性(香味调料)增加到已发布的咖啡店应用中去,原来的咖啡店只是简单的销售四种简单类型的饮料。

LabVIEW面向对象设计模式学习之四:装饰模式 - labats - LabATSS

 

而后,调味香料(类)被添加进来,当然调味香料(类)也是饮料类(Beverage.lvclass),以便香料类的子类们可以获取原来饮料类(如Espresso.lvclass等)的同数据类型。

LabVIEW面向对象设计模式学习之四:装饰模式 - labats - LabATSS

 

这个香味料也拥有“Cost.vi”和“Get Description.vi”作为动态分派方法,并且它们包含一个单独的饮料(Beverage)类对象来作为数据成员(组合包含)。当一种饮料像Espresso被实例化时,它可以被调味料奶泡(Whipped)包转(装饰)起来,这样客户就可以通过调用Whip.lvclass:Cost.vi来获取带奶泡香味的Espressor的总价格。通过该设计模式提供了运行时扩展基础饮料类的特性(不同的口味+饮料的组合),并且同时兼备了即使在将来发件发布后也可以增加新特性的一种扩展编程方式。

Editorial Comments (编者意见)

【David Staab】这个特别的例子是将《Head first Design Patterns》中Java语言讲解的装饰模式转换为LabVIEW版本。 

 

原外文及配套样例代码下载

  评论这张
 
阅读(414)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017