`
touchinsert
  • 浏览: 1287407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【软件测试自动化-VBScript基础讲座 7】== 工厂设计模式 ==

阅读更多

本文主要讲解一种强大的设计模式,在阅读本文之前请先确保你已经理解了一下几篇文章:

<!-- 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代替

通过上面的封装我们可以得到一个单体独立凝聚且易于实施和管理维护的工厂类。通过工厂的核心来创建、储存、管理我们需要的输出机制,并通过关键字请求进行对象输出,是一种在测试设计中非常重要的设计模式。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics