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

LabATSS

关注自动测试软件

 
 
 

日志

 
 

LabVIEW面向对象设计模式学习之二:单例模式  

2011-06-20 16:38:55|  分类: LabVIEW |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

原想着单例模式是比较简单的模式,博文很快就能完成,但是“细节中有魔鬼”,看懂 LabVIEW实现代码并不是很容易,并且随着版本的更替通过使用新的技术又使其增加了复杂性,特别是需要掌握的知识点也很多,比如传值、传参考、功能全局函数、队列和通告的使用等等。

另外由于单例模式在某种程度上与全局变量有相似之处,我们知道LV是基于数据流编程范型的图形化语言,单例模式会造成破坏数据流向的作用,使得阅读和维护他人代码变得困难。因此在使用中需要谨慎小心,不可滥用。

目前,实现单例的LabVIEW主要方式有两种:第一种是SEQ(single-element queue)和FGV(functional global variable)和混合应用,第二种是DVR(Data Value Reference)和通告(Notifier)的使用,

 

第一种:SEQ和FGV和混合应用

SEQ和FGV实现,首版伴随着LV8.2的面向对象技术推出,由于时间紧迫,该版本问题多多,后继的版本使得设计更为合理,我们图例中所用的是LV2009中所带的版本。

Checkin.vi和Checkout.vi使用SEQ技术来确保在同一时刻内存中只有唯一的副本,当队列中的元素被调用者某一算法提出并修改时,其他操作就无法进行,从而确保对唯一数据源的线性操作,Dequeue操作来确保客户能够以集中方式处理单例模式所包装的类数据(从某种意义上来看,这种单例模式更像是一种类的特殊层封装),另外通过 re-enqueue 数据对象实例达到checkin的目的。在采用SEQ和FGV技术的这种实现中,队列(queue)起到对对象的内存地址参考的作用,从而达到通过Checkin.vi和Checkout.vi可以在应用程序中到处使用的目的,内存地址参考的持久化是通过一个FGV功能全局函数,FGV使用Get Queue方法提供内存地址参考。并利用首次调用图标功能,后继的使用就可以直接调用了。

为确保数据类(Data.lvclass)只有单一的实例,除采用了上述的技术外还将数据对象实例放在一个自有库Singleton.lvlib中,并将此数据类访问权限设置为私有(private),这样库外的程序将无法直接的使用此数据类,并保证用户(调用者)只能使用Singleton.lvlib:checkout.vi来获取数据类中的当前值,而当需要数据类设置新值的时候需要使用另外一个方法Singleton.lvlib:checkin.vi,当然这两个方法也可以像其他方法一样放置到数据类当中去,但在实际的解决方案中是把checkout.vi和checkin.vi移至到Singleton.lvlib库中以免封装的数据类错误的将两个需要公开的方法移除。

 
LabVIEW面向对象设计模式学习之二:单例模式 - labats - LabATSS
 
 
LabVIEW面向对象设计模式学习之二:单例模式 - labats - LabATSS
 
 

第二种:DVR和Notifier 通告实现

在该实现中,是用通告Notifier 代替FGV全局功能函数,将对象实例存执在通告当中;而DVR用来实现与SEQ相似的功能,这两项功能可以实现最大化的相互替代,但是DVR还有以下好处:首先是DVR能够对对象简单易行的直接参考化和解参考,其次在版本2010中,对象属性可以直接通过DVR来使用。

 

LabVIEW面向对象设计模式学习之二:单例模式 - labats - LabATSS

 

LabVIEW面向对象设计模式学习之二:单例模式 - labats - LabATSS

  

 

原外文及配套程序下载链接

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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