-转-设计模式-工厂模式-vbs

上一篇 / 下一篇  2009-12-20 22:50:00 / 个人分类:设计模式

转自:http://blog.csdn.net/zzxxbb112/archive/2009/11/26/4879692.aspx
51Testing软件测试网#S2qT8MS1g
51Testing软件测试网E*s'ue NE
  • 工厂模式 ----   一种创建模式,也就是说它可以用于创建和初始化某个对象,就像它的名字一样,我们可以把我们需要东西都放在这个工厂里,并可以根据我们的需要为此工厂抽象出一些方法,并提供相应的接口来调用,这样我们就可以自由的通过这些接口来拿工厂里的方法,这就是此设计模式的作用。接下来我们就来看一个最简单的额例子。

Function ObjectFactory(sObjectName) 
n8S-}0F/Y$B0    Select Case sObjectName 
%[6l-g5Gc7l0        Case "Search Edit" 51Testing软件测试网+d9W@U/\/~p7Bz(R^
            Set ObjectFactory = Browser("micClass:=Browser")._ 
*| l qC Yu+M0                                                     Page("micClass:=Page").WebEdit("name:=wd") 51Testing软件测试网;L(k2?]*D:u{k+a
        Case "Search Button" 
3R"MM xi%bxP0            Set ObjectFactory = Browser("micClass:=Browser")._ 51Testing软件测试网 dfp&smy"PJ1^
                                                     Page("micClass:=Page").WebButton("name:=百度一下") 
)]$AV.|d0        Case Else 51Testing软件测试网@r@aQ5MQ2B
            Set
 ObjectFactory = Nothing 51Testing软件测试网_.C%p(p p
    End Select 
|+E hK f0End Function 51Testing软件测试网0VGA8Z~I`}b
ObjectFactory("Search Edit").Set "zzxxbb112" 51Testing软件测试网8f/u7lS \
ObjectFactory("Search Button").click

'B3d TyL'n0

以上代码是一个最简单的演示,此代码不一定有实际用途,主要是为了能让大家更好的理解工厂模式,我们可以看到使用以上的方法,我们可以很方便的管理我们需要的对象,并对其进行命令式的调用,并可以为这些对象创建一个公共接入点。51Testing软件测试网+r^^Z z

以上这个例子随便可以使用我们调用方便,并且易于实施和维护,但它缺有个致命的缺陷,那就是当使用工厂模式创建完对象之后,如果再次进行创建,它就会再实例化一个对象出来(特别是针对CREATEOBJECT命令的情况下),这样就会出现对象混乱的现象,解决方案就是使用单例模式凝聚对象实体,工厂模式来管理实时各个对象。来看下一个例子。

'P y5EU9w0^0

Public oOutputs 
:n_;k!D.f0Set oOutputs = New OutFactory51Testing软件测试网X1~{L,O/}E

Class OutFactory51Testing软件测试网%eH.U1j{)r \:^v

    Public Channels '定义变量 51Testing软件测试网y})I]'_ [
    Private Sub Class_Initialize 51Testing软件测试网4C:\j0^,yS]Id
        Set
 Me.Channels = CreateObject("Scripting.Dictionary") 
Y*R(C @;h%SruK/]0    End Sub 
0] ^KP?%L J0    Private Sub Class_Terminate 51Testing软件测试网9u.W"e6s RJf? APE
        Set 
Me.Channels = Nothing 
~c q{5H"@ O ANTj0    End Sub 51Testing软件测试网9_O ` ^KB"j
    Public Sub
 Construct (sChannelName, sChannelType) 
R@4H+C `,c0        Dim oNewChannel 51Testing软件测试网Z1H*Q,]8{c H {
        Select Case sChannelType 
aB+[+H?E|Je0            Case "excel" 51Testing软件测试网&[9wW jPg/[$F"V k/G
                '创建一个EXCEL的SINGLETON类 51Testing软件测试网6z0_ l vXnh{x
                Set oNewChannel = New ExcelWrapper 51Testing软件测试网W/M7eMNa3F
            Case "fso" 51Testing软件测试网+^~GB$o6G u3a9A+P3j
                '创建一个FSO的SINGLETON类 
{)Q!|&nod g-ELdI0
                Set oNewChannel = New fsoWrapper 51Testing软件测试网6S%qR'~)E2v!_
            Case "DB" 
[*T4gbe'zt6i0                '创建一个ADO的SINGLETON类 51Testing软件测试网k u8r7r-P o;`
                Set oNewChannel = New DBWrapper 51Testing软件测试网8w8y&]hd KZ
        End Select 
X\I%B)K%h}9bFe0
        '把类都存储起来 
-}/pPD5Xf+r|0        Me.Channels.Add sChannelName, oNewChannel 51Testing软件测试网R \c*\1tt
    End Sub 
VV;aHV4i&{_0End Class

T!qn8O^s+F*Z5F0

'***********构造方法********** 51Testing软件测试网)`J v3S)J"v&u
oOutputs.Construct "excel_instance","excel" 51Testing软件测试网vqf:c{ q4nA
oOutputs.Construct "fso_instance","fso" 
EQ+z*J-Zd3h`0oOutputs.Construct "DB_instance","DB" 51Testing软件测试网Tk LUNR
'***********直接拿我们需要的东西,并进行操作************ 51Testing软件测试网u:Y?J$xk!Q&r
oOutputs.Channels("excel_instance").whatever  51Testing软件测试网 xd&Mm!j
'此处的WHATEVER是EXCEL的SINGLETON类中的自定义方法,这里就用WHATEVER代替51Testing软件测试网7G.w/~0qn8I2e

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


fv~M6O,Sq#lt"Zg051Testing软件测试网6S:x`2ta*y CI

comment:一直觉得搞点excel填数据生成脚本,不算什么框架,至少不算高级的框架,我认为框架至少是有运用些设计模式,现在有高人用我们熟悉的vbs来给我们讲设计模式,有福了。学习51Testing软件测试网+e6_EMY6t1_


TAG:

 

评分:0

我来说两句

Open Toolbar