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

LabATSS

关注自动测试软件

 
 
 

日志

 
 

LabVIEW面向对象设计模式学习之五:组合模式  

2011-11-14 15:12:05|  分类: LabVIEW |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

Hierarchy Composition Pattern(层次组合模式)——对象结构型模式

 

Intent(意图)

为将一组琐碎的树型结构实例表示为一个单个整体对象类型。该设计模式适合于图形(一个图形是由一组子图形组合而成)、文件系统(目录同时包含文件和其它的子目录),以及其它需要使用一个整体概念来表示各个子单元的组合。

 Motivation(动机)

“组合”简单说就是使用一个类作为另外一个类的数据成员,该类因此被包含在另外一个类中,当你设计类的时候该类适合更小实例对象组合而成,那此时层次组合设计模式就特别适合。

 Implementation(实现)

 LV8.2中的样例程序库中有该设计模式的例程(example),但该例程在LV8.6中重新编写过,其目录地址为<labview>\examples\lvoop\Graphics\Graphics.lvproj

 该例程中有一个层次组合类Graphic.lvclass,其结构如下图显示:

LabVIEW面向对象设计模式学习之五:组合模式 - labats - LabATSS

 

LabVIEW面向对象设计模式学习之五:组合模式 - labats - LabATSS

 

LabVIEW面向对象设计模式学习之五:组合模式 - labats - LabATSS

 

 一个图形首先任务是需要画出些东西,图形类(Graphic)需要定义方法Draw.vi,该方法可以被子类复写,样例中有三个图形类的子类,子类直接继承于图形类,分别是Point.lvclass(点类),Line.lvclass(线类),和Circle.lvclass(圆形类),每个子类都有各自独需的数据作为它们自己数据成员,并且相应地具体实现方法Render Picture.vi,样例另外一个重要类是集合类Collection.lvclass,集合类用一个图形数组作为自己的私有数据成员,这意味着首先集合类是一个图形类并且包含了其他的图形类,并且集合类实现Render Picture.vi方法的方式是通过循环调用图形数组中的每个元素的Render Picture.vi方法。此样例例程展示到了一个由独立的点、线、和圆形组成图形组合。

 你可以继续增加一个集合(Collection)到另外一个集合中,内嵌它们从而创建更复杂的图形。

 当你试图调用一个嵌套的集合中的Render Picture.vi方法时会有一个问题,原因是这需要一个递归调用Collection.lvclass:Render Picture.vi, 而在LabVIEW 8.5版本中支持递归调用只有当你选用动态分配(reentrant)重入选项“Share clones(克隆共享)”使能时可用。

 Editorial Comments (编者意见)

【Stephen Mercer】具备控制输入/显示单元能力的类,即可以包含自身也包含其子类,这种特性使得LabVIEW类与在C++或java以及其他面向对象语言中的类有着很大的不同,LabVIEW拥有一个机制,该机制允许我们在一个类中混合包含其他的类即一个类包含一个指向其他类的参考(a reference)。我们拥有by-value(传递值)范型,但是这种包含规则行为类似在其他多数面向对象语言中的参考(by-reference)。
  评论这张
 
阅读(597)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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