EPower2002示例:运用工厂方法设计类

发表于:2007-06-30来源:作者:点击数: 标签:
EPower2002示例:运用工厂方法设计类 1.新建一类库工程,命名为 VB NE TD esignMode. vb 2.将Class1.vb删除 3.在此工程中添加类,命名为FactoryMethod.vb 4.在FactoryMethod.vb中添加产品类Product. (1)添加三个私有成员变量:mID,mName,mCreaDate (2)添加三个公
EPower2002示例:运用"工厂方法"设计类

1.新建一类库工程,命名为"VBNETDesignMode.vb"
2.将Class1.vb删除
3.在此工程中添加类,命名为"FactoryMethod.vb"
4.在"FactoryMethod.vb"中添加产品类"Product".
  (1)添加三个私有成员变量:mID,mName,mCreaDate
  (2)添加三个公有属性:ID,Name,CreaDate
***********************************************
FactoryMethod.vb代码如下:
***********************************************
Public Class Product    @#产品
    @#定义私有成员变量
    Private mID As Integer
    Private mName As String
    Private mCreaDate As DateTime
    @#定义属性
    Public Property ID() As Integer
        Get
            Return mID
        End Get
        Set(ByVal Value As Integer)
            mID = Value
        End Set
    End Property
    Public Property Name() As String
        Get
            Return mName
        End Get
        Set(ByVal Value As String)
            mName = Value
        End Set
    End Property
    Public Property CreaDate() As DateTime
        Get
            Return mCreaDate
        End Get
        Set(ByVal Value As DateTime)
            mCreaDate = Value
        End Set
    End Property

    @#以下还可定义其它属性
    @#以下还可定义更多方法
    @#以下还可定义更多事件
End Class

5.再添加一类,命名为"Factory.vb"
6.在其类中,用Overridable关键字定义CreateProduct方法,方法将返回一个Product类的实例.
7.在CreateProduct函数体中初始化Product类.在这里,为演示方便,我们将此产品编号ID定为99999,产品名称Name定为"DreamFactoryNO.1",出产日期为date.now

**********************************
Factory.vb代码如下:
**********************************
Public Class Factory    @#工厂
    @#用Overridable关键字定义CreateProduct方法,该方法返回一个Product类的实例
    @#由于它有Overridable关键字,其子类可用Overrides关键字覆盖。
    Public Overridable Function CreateProduct() As Product
        Dim NewProduct As New Product()
        @#进行产品类的初始化工作
        NewProduct.ID = 99999
        NewProduct.Name = "DreamFactoryNO.1"
        NewProduct.CreaDate = Date.Now
        Return NewProduct
    End Function
End Class

8.接下来,我们要在该解决方案中添加一"window应用程序"项目,将该项目命名为"Test"
一般来说,最好将该测试工程保存在该类的文件夹内.

9.将VS默认生成的form1.vb更名为"frmFactory.vb",最好也代码视图中的"public Class Form1()"改为"public Class frmFactory()"
代码如下:
Public Class frmFactory
    Inherits System.Windows.Forms.Form
    #Region " Windows 窗体设计器生成的代码 "
    注:其中代码已省略
    #End Region
End Class

10.添加对"VBNETDesignMode"项目的引用,并导入VBNETDesignMode名称空间.
Imports VBNETDesignMode

11.添加一个名为"NewFactory"的新类,我们将让此类继承Factory类.继承是通过Inherits关键字实现的.
Inherits VBNETDesignMode.Factory

12.由于我们要对产品进行新的初始化操作,因此,我们将要覆盖CreateProduct方法.
前面我们说过,该方法之所以可以覆盖,是因为它是被Overridable关键字来声明的.
Public Class NewFactory
    Inherits VBNETDesignMode.Factory
    Public Overrides Function CreateProduct() As Product
        Dim NewProduct As New Product()
        @#进行产品类的初始化工作
        NewProduct.ID = 88888
        NewProduct.Name = "DreamFactoryNO.2"
        NewProduct.CreaDate = Date.Now
        Return NewProduct
    End Function
End Class

13.最后,我们在窗体的Load中来分别测试:

    Private Sub frmFactory_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim OldPro As New Product()
        Dim OldFac As New Factory()
        OldPro = OldFac.CreateProduct
        Debug.WriteLine("********旧产品信息**********")
        Debug.WriteLine("        ID:" & OldPro.ID)
        Debug.WriteLine("      Name:" & OldPro.Name)
        Debug.WriteLine("  CreaDate:" & OldPro.CreaDate)

        Dim NewPro As New Product()
        Dim NewFac As New NewFactory()
        NewPro = NewFac.CreateProduct
        Debug.WriteLine("********新产品信息**********")
        Debug.WriteLine("        ID:" & NewPro.ID)
        Debug.WriteLine("      Name:" & NewPro.Name)
        Debug.WriteLine("  CreaDate:" & NewPro.CreaDate)
    End Sub

小结:
以上代码虽无什么实用价值,但是实现这些代码的设计思想却是很有实用价值的,当你真正理解"工厂方法"的设计模式后,你可以开发出效率更高更专业的东西来的.


原文转自:http://www.ltesting.net