逻辑框架法的模式 .NET 框架中的 Factory 模式
.NET 框架中的 Factory 模式
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 模式的基本结构图先发上来 另外本人还附一张相应 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 下的System Text Encoding GetEncodingRare(int codepage)函数即可 看到里 面的还有一些没有实现的case 条件段大家就应该明白了 而有关codepage 设置参见 另外就是框架本身更新的速度还是非常快的(微软可能在将来某个版本中改动这部分的代码 但目 框架下未发生变化) 当然解决新加编码的方式不止一种 有人建议用反射 也有说用 factory method 的 这 里就不多做介绍了 (例如:) 还有一个地方就是如下对属性的声明
lishixinzhi/Article/program/ASP/201311/21701