孫斌
【摘 要】當我們需要寫功能相似函數過程,同時可處理int、string、Date或其它數據類型時,因方法參數類型不同,只能分別寫多個重載函數過程處理每種數據類型。如能在方法中傳入通用數據類型,就可合并代碼。這就自然而然的引入了泛型概念。通過介紹使用泛型的優點,說明使用泛型原因,結合井筒曲線圖道類生成,說明使用泛型建立抽象工廠方法。
【關鍵詞】數據類型 泛型 實例和實例化
1 泛型定義和優點
泛型是一種通用的數據類型。泛型可通過反射獲取泛型數據類型中使用的類型信息。泛型最常見的用途是創建集合類。.NET類庫在System.Collections.Generic命名空間中包含幾個新的集合類。
使用泛型可方便高效的重用代碼,當需要實現時,再進行處理。在.NET中使用泛型,它的數據類型和內部數據可在不導致增加代碼情況下更改,而不管使用的是值類型還是引用類型,都可一次性地編寫,并進行測試和系統部署,可通過任何類型來重用它,且都具有類型安全特性。因一般代碼不會強行對值類型進行裝箱和取消裝箱,或對引用類型進行向下強制類型轉換,所以使我們的程序性能得到顯著提高。
2 實際應用
以井筒曲線圖道類工廠為例,建立一個泛型抽象工廠。
(1)定義一個圖道類工廠方法,實現一個采用無參數構造函數來創建對象的工廠WellTrackFactory,代碼如下:
public class WellTrackFactory
(2)解決方法重載問題,引入TypeToken
public sealed class TypeToken
static private TypeToken
static public TypeToken
private TypeToken() { }}
這個類沒有成員,且每個類型實參只能創建一個實例,因此性能較高。但就因該實例上帶有其類型實參的類型信息,因此可作為判斷函數重載依據。下面就用TypeToken
public interface IAbstractFactory
T1 Create(TypeToken
(3)針對抽象工廠實現具體工廠。具體工廠是利用生產每種圖道類型單一工廠來組合實現。因此只要有每種圖道類型單一工廠就可直接組合生成抽象工廠,而無需定義一個專用類來生成圖道。代碼如下:
public class FactTrackFactory
{private IWellTrackFactory
private IWellTrackFactory
public FactTrackFactory(IFactory
{factory1 = f1;factory2 = f2;}public T1 Create(TypeToken
{return factory1.Create();}public T2 Create(TypeToken
{return factory2.Create(); }}public static class FactTrackFactory
{public static FactTrackFactory T2>(IWellTrackFactory {return new FactTrackFactory (4)建立實例使用這個泛型抽象工廠。以曲線型圖道為例,代碼如下: //曲線型圖道public abstract class CurveWellTrack{ public abstract string TrackName { get; }//圖道名稱 public abstract string TrackCaption { get; }//圖道圖頭標題 } 下面就可以隨意生成所需的抽象工廠接口,并快速從現有的單獨圖道工廠組合成特定的具體工廠實現。先定義一個生產圖道類的方法: public static IAbstractFactory return FactTrackFactory.NewFactory(new WellTrackFactory }else if (type == "Rect"){return FactTrackFactory.NewFactory(new WellTrackFactory (5)將生產出的圖道信息,輸出到窗體中: public static void ExportProduct(ListBox lb) {//生產兩個類型圖道IAbstractFactory ImageWellTrack track2 = factory1.Create(TypeToken lb.Items.Add("圖道1" + track1.TrackName);lb.Items.Add(track1.TrackCaption); lb.Items.Add("圖道2" + track2.TrackName);lb.Items.Add(track2.TrackCaption);} 3 結語 文章簡單介紹了泛型的定義以及優點,并結合井筒曲線的圖道類的生成,說明了用泛型技術成功地增強原本重用性較低的抽象工廠的原理,演示了泛型在提高抽象性和代碼重用方面卓越的價值。