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
小結: 以上代碼雖無什么實用價值,但是實現這些代碼的設計思想卻是很有實用價值的,當你真正理解"工廠方法"的設計模式后,你可以開發出效率更高更專業的東西來的.
|