分析:
使用以上方法就可以达到永远只有一个实例对象,如果有创建,直接引用已创建的实例,如果没有创建,则直接创建一个,使oExcel 这个全局变量永远只有一个实例。但是这样写程序我们会发现一个问题,当在创建多个对象并将指针指向全局变量的这个实例时,我们都需要销毁这些对象,但是就算把这些对象全部销毁,全局变量的实例还是一直会持续下去,不会释放。因此,需要使用类进行包装来改善这种情况,实现如下所示:
Option Explicit Public oExcel '声明全局变量 Class ExcelWrapper Private oExcelObject ‘初始化类 Private Sub Class_Initialize Dim bAleadyInit '判断对象是否存在的标志位 '检查对象是否已经被初始化 bAlreadyInit = False If IsObject(oExcel) = True Then '对象初始化 If Not oExcel is Nothing Then '激活状态 bAlreadyInit = True End If End If '如果标志位是False,则创建一个实例对象 If bAlreadyInit = False then Set oExcel = CreateObject("Excel.Application") end If Set oExcelObject = oExcel End Sub ‘类销毁时退出Excel,并且释放Excel对象引用 Private Sub Class_Terminate oExcelObject.Quit Set oExcelObject = Nothing End Sub Public Sub Open(oFileName) '写入打开文件的代码 End Sub Public Function GetSheetData(oSheet) '写读取单元格的代码 End Sub '********等等,可以写更多方法******* End Class Set oExcelInstace = New ExcelWrapper oExcelInstace.Open("……") |
分析:
以上脚本主要是为之前的步骤封装了一层类,以及对其类的初始化和销毁做了相应的处理,并加上了一些自定义的方法。这样,一个完美的单例模式就完成了。当创建ExcelWrapper这个类包装的时候就只会调用单个实例,在类销毁时,会自动销毁此全局变量的实例,这样就再也不会在进程里看到N多个Excel进程实例了。
单例模式在QTP中的应用:
在QTP中可以使用环境变量来代替,把之前的全局变量更改为环境变量作为对象。调用方法还是和原来的方法一样,代码如下所示:
Class ExcelWrapper Private oExcelObject Private Sub Class_Initialize Dim bAleadyInit '判断对象是否存在的标志位 On Error Resume Next bAlreadyInit = IsObject(Environment("Excel_Object")) '检查对象是否已经被初始化 If Err.Number <> 0 Then bAlreadyInit = False On Error Goto 0 If bAlreadyInit = True Then If Environment("Excel_Object") is Nothing Then bAlreadyInit = False End If If bAlreadyInit = False Then Environment("Excel_Object") = CreateObject("Excel.Application") End If Set oExcelObject = Environment("Excel_Object") End Sub Private Sub Class_Terminate oExcelObject.Quit Set oExcelObject = Nothing End Sub Public Sub Open(sFileName) '写入打开文件的代码 End Sub Public Function GetSheetData(sSheet) '写入读取单元格的代码 End Sub '********等等,可以写更多方法******* End Class |
总结:
单例模式可以帮助我们很好地管理对象的生命周期,使用它能够更好地帮我们集中对象的实体,更好地控制对象。后续会讲解更加强大的工厂设计模式来使脚本变得更加强大。
本文选自《51Testing软件测试作品系列》之九——《精通QTP——自动化测试技术领航》。
本站经人民邮电出版社和作者的授权,近期将进行部分章节的独家连载,敬请期待!
版权声明:51Testing软件测试网获人民邮电出版社和作者授权独家连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关阅读: