扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:代振军 来源:博客园 2007年8月26日
关键字:
首先请大家看一下如下代码段:
|
相信大家对于这样的代码司空见惯了吧!本人也是在使用很长一段时间之后,才对里面的实现方式发生兴趣的,在了解了基本的算法逻辑后,发现这个名Encoding这个抽象类的部分代码是使用Factory模式实现的。
为了清楚说明这个问题,本人将Factory 模式的基本结构图先发上来,另外本人还附一张相应的.net Encoding实现的结构图,以便大家对比参照:
Factory图 |
.net Encoding结构图2 |
这里需要说明的是Factory 结构图中的SimpleFactory部分在Encoding 代码中被合并了,原因我猜应该是为了方便调用和维护。如果把GetEncoding() 拿出来放到SimpleFactory中,也只是“搬个家”而已。另外就是封装到了Encoding中同样也会出现工厂模式所不可回避的问题就是如果新增加一种编码怎么办?让我们看看微软所做的一些“尝试”:
在GetEncoding(Int32)函数里的switch 有如下代码:
switch (codepage) |
在GetEncodingRare里面有一些少见编码的实例化调用,具体的声明我就不多说了,大家可以用Reflactor到mscorlib下的System.Text.Encoding.GetEncodingRare(int codepage)函数即可, 看到里面的还有一些没有实现的case 条件段大家就应该明白了。
另外就是框架本身更新的速度还是非常快的(微软可能在将来某个版本中改动这部分的代码,但目前.net 3.0框架下未发生变化)。当然解决新加编码的方式不止一种,有人建议用反射,也有说用“factory method”的,这里就不多做介绍了。
还有一个地方就是如下对属性的声明。
private static Encoding asciiEncoding; |
基本上对框架中主要的编码都有声明。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者