本文主要讲解一种强大的设计模式,在阅读本文之前请先确保你已经理解了一下几篇文章:
<!-- google_ad_client = "pub-9907354422678176"; /* 728x90, 创建于 09-12-1 */ google_ad_slot = "0609866937"; google_ad_width = 728; google_ad_height = 90; //-->【软件测试自动化-VBScript基础讲座 3】== 类的组成 ==
http://blog.csdn.net/zzxxbb112/archive/2009/11/13/4805618.aspx
【软件测试自动化-VBScript基础讲座 4】== Dictionary 对象 ==
http://blog.csdn.net/zzxxbb112/archive/2009/11/18/4830732.aspx
【软件测试自动化-VBScript基础讲座 6】== 单例模式 ==
http://blog.csdn.net/zzxxbb112/archive/2009/11/26/4879692.aspx
Function ObjectFactory(sObjectName)
Select Case sObjectName
Case "Search Edit"
Set ObjectFactory = Browser("micClass:=Browser")._
Page("micClass:=Page").WebEdit("name:=wd")
Case "Search Button"
Set ObjectFactory = Browser("micClass:=Browser")._
Page("micClass:=Page").WebButton("name:=百度一下")
Case Else
Set ObjectFactory = Nothing
End Select
End Function
ObjectFactory("Search Edit").Set "zzxxbb112"
ObjectFactory("Search Button").click
以上代码是一个最简单的演示,此代码不一定有实际用途,主要是为了能让大家更好的理解工厂模式,我们可以看到使用以上的方法,我们可以很方便的管理我们需要的对象,并对其进行命令式的调用,并可以为这些对象创建一个公共接入点。
以上这个例子随便可以使用我们调用方便,并且易于实施和维护,但它缺有个致命的缺陷,那就是当使用工厂模式创建完对象之后,如果再次进行创建,它就会再实例化一个对象出来(特别是针对CREATEOBJECT命令的情况下),这样就会出现对象混乱的现象,解决方案就是使用单例模式凝聚对象实体,工厂模式来管理实时各个对象。来看下一个例子。
Public oOutputs
Set oOutputs = New OutFactory
Class OutFactory
Public Channels '定义变量
Private Sub Class_Initialize
Set Me.Channels = CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate
Set Me.Channels = Nothing
End Sub
Public Sub Construct (sChannelName, sChannelType)
Dim oNewChannel
Select Case sChannelType
Case "excel"
'创建一个EXCEL的SINGLETON类
Set oNewChannel = New ExcelWrapper
Case "fso"
'创建一个FSO的SINGLETON类
Set oNewChannel = New fsoWrapper
Case "DB"
'创建一个ADO的SINGLETON类
Set oNewChannel = New DBWrapper
End Select
'把类都存储起来
Me.Channels.Add sChannelName, oNewChannel
End Sub
End Class
'***********构造方法**********
oOutputs.Construct "excel_instance","excel"
oOutputs.Construct "fso_instance","fso"
oOutputs.Construct "DB_instance","DB"
'***********直接拿我们需要的东西,并进行操作************
oOutputs.Channels("excel_instance").whatever
'此处的WHATEVER是EXCEL的SINGLETON类中的自定义方法,这里就用WHATEVER代替
通过上面的封装我们可以得到一个单体独立凝聚且易于实施和管理维护的工厂类。通过工厂的核心来创建、储存、管理我们需要的输出机制,并通过关键字请求进行对象输出,是一种在测试设计中非常重要的设计模式。