1)想使用一个已经存在的类,但它的接口不符合需求;2)想创建一个可复用的类,该类可以与其他不相关的类协同工作;3)想使用一些已经存在的子类,但不可能对每一个都进行子类化以匹配它们的接口。
3.2工程中适配器方法的实现。
在实际工程中,适配器类实现了电台监控软件和频率干扰分析模块之间接口转换的封装。电台监控软件通过适配器类提供的接口实现频率干扰分析的运行,同时通过界面预先显示频率干扰分析的结果,供操作员参考。
通过应用适配器模式,实现了频率干扰分析类与电台监控软件的无缝链接,使得以前无法一起工作的电台监控软件和频率干扰分析模块实现了兼容工作,同时电台监控软件的修改工作量也压缩到了最小程度。
4频率干扰分析的共享。
为了实现频率干扰分析数据和结果的共享,以供不同席位的操作员同时查看和参考,我们采用了单件模式(Singleton Method)来实现此功能。
4.1单件模式介绍。
单件模式保证了一个类仅有一个实例,并提供了一个访问它的全局访问点。单件模式的结构图如图5所示。
其中:
1)Singleton:定义了一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作,负责创建它自己的唯一实例。
客户只能通过Singleton的Instance操作访问一个Singleton的实例。单件模式的优点主要包括:
1)对唯一实例的受控访问:Singleton类封装它的唯一实例,它可以严格的控制客户怎样以及何时访问它;2)缩小名空间:Singleton模式是对全局变量的一种改进,避免了那些存储唯一实例的全局变量污染名空间;3)允许对操作和表示的精化:Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的事情;4)允许可变数目的实例:这种模式使得根据用户的需求进行修改变得非常简单可行。
4.2工程中单件模式的实现。
在C++中我们采用Singleton类的静态成员函数Instance来定义这个类操作,同时还定义了一个静态成员变量m_Instance,它包含了一个指向它的唯一实例的指针。
CRuleMediator类定义如下[3,6].
static CRuleMediator* m_Instance;//单键实例对象指针
通过单件模式,不同席位的操作员通过调用CRuleMediator类的全局访问点Instance()访问该类的唯一实例m_Instance.从而实现了频率干扰分析数据和结果的共享。
5频率干扰分析软件的效果。
通过应用工厂模式、适配器模式和单件模式,实现了频率干扰分析规则的封装、与电台监控软件的兼容工作和频率干扰信息的共享,在机场电台改进升级的工程项目中达到了很好的效果。图6为频率干扰分析结果的截屏。
6结语。
本文以作者参与的一个工程项目为背景,着重讨论了频率干扰分析模块的软件模式设计。主要应用了工厂模式、适配器模式和单件模式来实现。在此基础上,开发出符合项目需要的频率干扰分析软件,并在实际应用中获得了较好的效果。
参考文献:
[1]Erich Gamma Richard Helm Ralph Johnson John Vlis-sides.设计模式[M].北京:机械工业出版社,2007:458-466.Erich Gamma Richard Helm Ralph Johnson John Vlis-sides.Design Patterns[M].Beijing:China MachinePress,2007:458-466.
[2]Martin Fowler.重构-改善既有代码的设计[M].北京:中国电力出版社,2008:186-197.Martin Fowler.Refactoring:Improving the Design ofExisting Code[J].Beijing:China Infopower Press,2008:186-197.
[3]David J.Kruglinski.Visual C++技术内幕[M].第四版。北京:清华大学出版社,2003:286-290.David J.Kruglinski.Visual C++[M].4th Edition.Beijing:Tsinghua Press,2003:286-290.
[4]杨万全,熊淑华,等。现代通信技术[M].成都:四川大学出版社,2000:81-91.YANG Wanquan,XIONG Shuhua.Modern Communi-cation Technology[M].Chengdu:Sichuan UniversityPress,2000:81-91.
[5]曹志刚,钱亚生。现代通信原理[M].北京:清华大学出版社,1992:100-115.CAO Zhigang,QIAN Yasheng.Modern Communica-tion Principle[M].Beijng:Tsinghua Press,1992:100-115.
[6]Stephen R.Davids.C++编程指南[M].北京:电子工业出版社,1996:121-125.Stephen R.Davids.C+ + Programme Guide[M].Beijing:Publishing House of Electronics Infustry,1996:121-125.
[7]Kent Beck.重构过程如何运作[M].北京:中国电力出版社,1997:19-24.Kent Beck. Make it Run,Make it Right:DesignThrough Refactoring[M].Beijing:China InfopowerPress,1997:19-24.
[8]Bertrand Meyer.面向对象设计[M].北京:清华大学出版社,1997:126-128.Bertrand Meyer.Object Oriented Software Construcion[M].Beijing:Tsinghua Press,1997:126-128.
[9]官章全,刘加明。Visual C++ 6.0类库大全[M].北京:电子工业出版社,1999:243-250.GUAN Zhangquan,LIU Jiaming.Visual C+ + 6.0Microsoft Foundation Class Library[M].Beijing:Pub-lishing House of Electronics Infustry,1999:243-250.
[10]钱能。C++程序设计[M].北京:清华大学出版社,2003:349-352.QIAN Neng.C++ Programme Design[M].Beijing:Tsinghua Press,2003:349-352.