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

 Rss订阅IQuickTest关于如何订阅?

作者:zzxxbb112
时间:2009/12/02 版权所有,侵权必究。

出处:http://blog.csdn.net/zzxxbb112


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

【软件测试自动化-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代替

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值