网络学院
迷城学吧
硬件
手机
旅游
生活
渔鱼
美图
电影
游戏
  导航: 迷城学吧 · 网站编程教程 · .Net编程合集

.NET框架中地Factory模式

 
最新推荐文章
图文推荐
 
『.NET框架中地Factory模式』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2007-7-31 9:30:00 

【引自代振军的博客】Factory 模式是一种非常基本同时也是被广泛使用的设计模式,我在这里就不多说了,这种模式在框架程序设计中经常被采用,现在就说一下在.NET 框架下的一个使用例子。

首先请大家看一下如下代码段:

int iCount = System.Text.Encoding.Default.GetByteCount(calStr.Trim());

.....

byte[] b = Encoding.Default.GetBytes(str);

.....

Encoding encode = Encoding.GetEncoding(this.FileEncode);

.....

相信大家对于这样的代码司空见惯了吧!本人也是在使用很长一段时间之后,才对里面的实现方式发生兴趣的,在了解了基本的算法逻辑后,发现这个名Encoding这个抽象类的部分代码是使用Factory模式实现的。

为了清楚说明这个问题,本人将Factory 模式的基本结构图先发上来,另外本人还附一张相应的.net Encoding实现的结构图,以便大家对比参照:

Factory图
.net Encoding结构图2

这里需要说明的是Factory 结构图中的SimpleFactory部分在Encoding 代码中被合并了,原因我猜应该是为了方便调用和维护。如果把GetEncoding() 拿出来放到SimpleFactory中,也只是“搬个家”而已。另外就是封装到了Encoding中同样也会出现工厂模式所不可回避的问题就是如果新增加一种编码怎么办?让我们看看微软所做的一些“尝试”:

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

 switch (codepage)

{

.......

default:

unicode = GetEncodingCodePage(codepage);

if (unicode == null)

{

unicode = GetEncodingRare(codepage); //当编码很少见时

}

break;

......

}

在GetEncodingRare里面有一些少见编码的实例化调用,具体的声明我就不多说了,大家可以用Reflactor到mscorlib下的System.Text.Encoding.GetEncodingRare(int codepage)函数即可, 看到里面的还有一些没有实现的case 条件段大家就应该明白了。

另外就是框架本身更新的速度还是非常快的(微软可能在将来某个版本中改动这部分的代码,但目前.net 3.0框架下未发生变化)。当然解决新加编码的方式不止一种,有人建议用反射,也有说用“factory method”的,这里就不多做介绍了。

还有一个地方就是如下对属性的声明。

  private static Encoding asciiEncoding;

public static Encoding UTF8;

......

基本上对框架中主要的编码都有声明。

如果您有什么疑问,可以至论坛提出或者解答他人的疑问    返回页面顶部

·上一篇:
·下一篇:
·导航: 迷城学吧 · 网站编程教程 · .Net编程合集
网友自拍|生活百味|历史图片|摄影世界|明星图片|体坛图库|美女图片|图片纪实|世界奇观
相关文章
advertisement
Photshop高手进阶

关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 申请链接 | 设为首页 | 本页加入收藏 返回顶部  
网站文本地图
  版权所有:迷城学吧 欢迎各种媒体转载我们的原创作品[转载请注明出处]
Copyright © 2005-2008 www.McXb.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Monsi. Optimized for 1024x768 to Firefox and MS-IE6 7. Site powered by JoyON.
红盾Gov315
有一个迷样的城市
在每个人的内心深处
让我们探索发掘这古老的墓