熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

.NET 框架中的 Factory 模式

2013-11-15 12:49:28  來源: ASP編程 

  Factory 模式是一種非常基本同時也是被廣泛使用的設計模式 我在這裡就不多說了這種模式在框架程序設
  計中經常被采用今天就說一下在NET 框架下的一個使用例子
  
  首先請大家看一下如下代碼段


     int iCount = SystemTextEncodingDefaultGetByteCount(calStrTrim());
  
  byte[] b = EncodingDefaultGetBytes(str);
  
  Encoding encode = EncodingGetEncoding(thisFileEncode);
   

  相信大家對於這樣的代碼司空見慣了吧 本人也是在使用很長一段時間之後才對裡面的實現方式發生興趣的
  在了解了基本的算法邏輯後發現這個名Encoding這個抽象類的部分代碼是使用 Factory 模式實現的
   為了清楚說明這個問題本人將Factory 模式的基本結構圖先發上來另外本人還附一張相應 Encoding
  實現的結構圖以便大家對比參照
  
  
  Factory 圖
  
  
  net Encoding 結構圖
  
  
  這裡需要說明的是Factory 結構圖中的SimpleFactory部分在Encoding 代碼中被合並了原因我猜應該是為了方便調用
  和維護如果把GetEncoding() 拿出來放到SimpleFactory中也只是搬個家而已另外就是封裝到了Encoding中同樣也
  會出現工廠模式所不可回避的問題就是如果新增加一種編碼怎麼辦?讓我們看看微軟所做的一些嘗試:
  
   在GetEncoding(Int)函數裡的switch 有如下代碼

      switch (codepage)
   {
  
   default:
   unicode = GetEncodingCodePage(codepage);
   if (unicode == null)
   {
   unicode = GetEncodingRare(codepage); //當編碼很少見時
   }
   break;
  
   } 

  在GetEncodingRare裡面有一些少見編碼的實例化調用具體的聲明我就不多說了大家可以用
  Reflactor 到 mscorlib 下的SystemTextEncodingGetEncodingRare(int codepage)函數即可 看到裡
  面的還有一些沒有實現的case 條件段大家就應該明白了而有關codepage 設置參見
  
  
   另外就是框架本身更新的速度還是非常快的(微軟可能在將來某個版本中改動這部分的代碼但目
  框架下未發生變化)當然解決新加編碼的方式不止一種有人建議用反射也有說用factory method
  裡就不多做介紹了(例如:)
  
  
   還有一個地方就是如下對屬性的聲明

      private static Encoding asciiEncoding;
   public static Encoding UTF;
  
     

   基本上對框架中主要的編碼都有聲明目前根據我的理解只是為了方便使用才這樣安排的
  
   因為這篇文章的內容只是學框架時的副產品因此裡面的內容可讀性不強同時肯定會有偏頗之
  處如果大家有不同意見希望回復本人以糾正本人的誤解希望不要誤導大家:)


From:http://tw.wingwit.com/Article/program/ASP/201311/21701.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.