网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > .NET框架 > .NET 框架中的 Factory 模式  

.NET 框架中的 Factory 模式

2007-07-30  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

  

    Factory 模式是一种非常基本同时也是被广泛使用的设计模式, 我在这里就不多说了,这种模式在框架程序设
  计中经常被采用,今天就说一下在.NET 框架下的一个使用例子。
  
  首先请大家看一下如下代码段: 网管论坛bbs_bitsCN_com


  int iCount = System.Text.Encoding.Default.GetByteCount(calStr.Trim());
  .....
  byte[] b = Encoding.Default.GetBytes(str);
  .....
  Encoding encode = Encoding.GetEncoding(this.FileEncode);
  ..... 
网管联盟bitsCN@com


   
      相信大家对于这样的代码司空见惯了吧, 本人也是在使用很长一段时间之后,才对里面的实现方式发生兴趣的,
  在了解了基本的算法逻辑后,发现这个名Encoding这个抽象类的部分代码是使用 Factory 模式实现的。
   为了清楚说明这个问题,本人将Factory 模式的基本结构图先发上来,另外本人还附一张相应的.net Encoding
  实现的结构图,以便大家对比参照:
  
  
  Factory 图
  
  
  net Encoding 结构图
  
  
  这里需要说明的是Factory 结构图中的SimpleFactory部分在Encoding 代码中被合并了,原因我猜应该是为了方便调用
  和维护。如果把GetEncoding() 拿出来放到SimpleFactory中,也只是“搬个家”而已。另外就是封装到了Encoding中同样也
  会出现工厂模式所不可回避的问题就是如果新增加一种编码怎么办?让我们看看微软所做的一些"尝试":

网管下载dl.bitscn.com

  
   在GetEncoding(Int32)函数里的switch 有如下代码

网管u家u.bitsCN.com

   switch (codepage)
   {
   .......
   default:
   unicode = GetEncodingCodePage(codepage);
   if (unicode == null)
   {
   unicode = GetEncodingRare(codepage); //当编码很少见时
   }
   break;
   ......
   } 
中国网管联盟bitsCN.com

   在GetEncodingRare里面有一些少见编码的实例化调用,具体的声明我就不多说了,大家可以用
  Reflactor 到 mscorlib 下的System.Text.Encoding.GetEncodingRare(int codepage)函数即可, 看到里
  面的还有一些没有实现的case 条件段大家就应该明白了。而有关codepage 设置参见
  http://www.cppblog.com/shenhuafeng/archive/2007/04/05/21336.html
  
   另外就是框架本身更新的速度还是非常快的(微软可能在将来某个版本中改动这部分的代码,但目前.net3.0
  框架下未发生变化)。当然解决新加编码的方式不止一种,有人建议用反射,也有说用“factory method”的,这
  里就不多做介绍了。(例如:http://blog.csdn.net/linzhisong/archive/2007/07/13/1687887.aspx)
  
  
   还有一个地方就是如下对属性的声明

网管联盟bitsCN@com

   private static Encoding asciiEncoding;
   public static Encoding UTF8;
  
   ......  


   基本上对框架中主要的编码都有声明。目前根据我的理解只是为了方便使用才这样安排的。
  
   因为这篇文章的内容只是学习.net框架时的“副产品”,因此里面的内容可读性不强,同时肯定会有偏颇之
  处。如果大家有不同意见,希望回复本人,以纠正本人的误解,希望不要误导大家:)

网管bitscn_com


TAGs   模式   框架   Encoding   大家   代码   本人   Factory   编码   codepage      
 上一篇:常见dotNet加密保护工具分析介绍   下一篇:Java、.NET,为什么不合二为一?
.NET 框架中的 Factory 模式 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: