• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      使用泛型建立井筒曲線圖道工廠

      2015-07-03 09:27孫斌
      中國科技縱橫 2015年12期
      關(guān)鍵詞:數(shù)據(jù)類型

      孫斌

      【摘 要】當(dāng)我們需要寫功能相似函數(shù)過程,同時可處理int、string、Date或其它數(shù)據(jù)類型時,因方法參數(shù)類型不同,只能分別寫多個重載函數(shù)過程處理每種數(shù)據(jù)類型。如能在方法中傳入通用數(shù)據(jù)類型,就可合并代碼。這就自然而然的引入了泛型概念。通過介紹使用泛型的優(yōu)點(diǎn),說明使用泛型原因,結(jié)合井筒曲線圖道類生成,說明使用泛型建立抽象工廠方法。

      【關(guān)鍵詞】數(shù)據(jù)類型 泛型 實例和實例化

      1 泛型定義和優(yōu)點(diǎn)

      泛型是一種通用的數(shù)據(jù)類型。泛型可通過反射獲取泛型數(shù)據(jù)類型中使用的類型信息。泛型最常見的用途是創(chuàng)建集合類。.NET類庫在System.Collections.Generic命名空間中包含幾個新的集合類。

      使用泛型可方便高效的重用代碼,當(dāng)需要實現(xiàn)時,再進(jìn)行處理。在.NET中使用泛型,它的數(shù)據(jù)類型和內(nèi)部數(shù)據(jù)可在不導(dǎo)致增加代碼情況下更改,而不管使用的是值類型還是引用類型,都可一次性地編寫,并進(jìn)行測試和系統(tǒng)部署,可通過任何類型來重用它,且都具有類型安全特性。因一般代碼不會強(qiáng)行對值類型進(jìn)行裝箱和取消裝箱,或?qū)σ妙愋瓦M(jìn)行向下強(qiáng)制類型轉(zhuǎn)換,所以使我們的程序性能得到顯著提高。

      2 實際應(yīng)用

      以井筒曲線圖道類工廠為例,建立一個泛型抽象工廠。

      (1)定義一個圖道類工廠方法,實現(xiàn)一個采用無參數(shù)構(gòu)造函數(shù)來創(chuàng)建對象的工廠WellTrackFactory,代碼如下:

      public class WellTrackFactory : IWellTrackFactory where TTrack : TAbstractTrack, new(){public TAbstractTrack Create(){ return new TTrack(); }}

      (2)解決方法重載問題,引入TypeToken類型,定義如下:

      public sealed class TypeToken{

      static private TypeToken instanceValue = new TypeToken();

      static public TypeToken Instance{ get { return instanceValue; }}

      private TypeToken() { }}

      這個類沒有成員,且每個類型實參只能創(chuàng)建一個實例,因此性能較高。但就因該實例上帶有其類型實參的類型信息,因此可作為判斷函數(shù)重載依據(jù)。下面就用TypeToken作為區(qū)分生產(chǎn)函數(shù)重載依據(jù),定義一個生產(chǎn)兩種圖道類的抽象工廠接口,實現(xiàn)如下:

      public interface IAbstractFactory{

      T1 Create(TypeToken token); T2 Create(TypeToken token);}

      (3)針對抽象工廠實現(xiàn)具體工廠。具體工廠是利用生產(chǎn)每種圖道類型單一工廠來組合實現(xiàn)。因此只要有每種圖道類型單一工廠就可直接組合生成抽象工廠,而無需定義一個專用類來生成圖道。代碼如下:

      public class FactTrackFactory : IAbstractFactory

      {private IWellTrackFactory factory1;

      private IWellTrackFactory factory2;

      public FactTrackFactory(IFactory f1, IWellTrackFactory f2)

      {factory1 = f1;factory2 = f2;}public T1 Create(TypeToken token)

      {return factory1.Create();}public T2 Create(TypeToken token)

      {return factory2.Create(); }}public static class FactTrackFactory

      {public static FactTrackFactory NewFactory

      T2>(IWellTrackFactory f1, IWellTrackFactory f2)

      {return new FactTrackFactory(f1, f2); }}

      (4)建立實例使用這個泛型抽象工廠。以曲線型圖道為例,代碼如下:

      //曲線型圖道public abstract class CurveWellTrack{

      public abstract string TrackName { get; }//圖道名稱

      public abstract string TrackCaption { get; }//圖道圖頭標(biāo)題 }

      下面就可以隨意生成所需的抽象工廠接口,并快速從現(xiàn)有的單獨(dú)圖道工廠組合成特定的具體工廠實現(xiàn)。先定義一個生產(chǎn)圖道類的方法:

      public static IAbstractFactory WellTrackFactory(string type){if (type == "Line"){

      return FactTrackFactory.NewFactory(new

      WellTrackFactory(),new WellTrackFactory());

      }else if (type == "Rect"){return FactTrackFactory.NewFactory(new WellTrackFactory(),new WellTrackFactory());} return null; }

      (5)將生產(chǎn)出的圖道信息,輸出到窗體中:

      public static void ExportProduct(ListBox lb)

      {//生產(chǎn)兩個類型圖道IAbstractFactory factory1 = WellTrackFactory("Line");CurveWellTrack track1 = factory1.Create(TypeToken.Instance);

      ImageWellTrack track2 = factory1.Create(TypeToken.Instance);

      lb.Items.Add("圖道1" + track1.TrackName);lb.Items.Add(track1.TrackCaption);

      lb.Items.Add("圖道2" + track2.TrackName);lb.Items.Add(track2.TrackCaption);}

      3 結(jié)語

      文章簡單介紹了泛型的定義以及優(yōu)點(diǎn),并結(jié)合井筒曲線的圖道類的生成,說明了用泛型技術(shù)成功地增強(qiáng)原本重用性較低的抽象工廠的原理,演示了泛型在提高抽象性和代碼重用方面卓越的價值。

      猜你喜歡
      數(shù)據(jù)類型
      詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
      如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
      范疇數(shù)據(jù)類型上的子類型*
      龙泉市| 泰州市| 合川市| 彰化市| 民丰县| 台东县| 嘉荫县| 衡山县| 进贤县| 永济市| 武功县| 濮阳市| 和田市| 大安市| 都兰县| 科技| 泗阳县| 天台县| 周宁县| 无为县| 南充市| 出国| 三亚市| 安庆市| 溧水县| 南开区| 永泰县| 正镶白旗| 资兴市| 登封市| 平山县| 容城县| 台州市| 绿春县| 遂宁市| 织金县| 城步| 安义县| 武隆县| 城口县| 佳木斯市|