您现在的位置是:首页 >

逻辑框架法的模式 .NET 框架中的 Factory 模式

火烧 2022-11-06 03:36:18 1053
.NET 框架中的 Factory 模式   Factory 模式是一种非常基本同时也是被广泛使用的设计模式 我在这里就不多说了 这种模式在框架程序设 计中经常被采用 今天就说一下在 NET 框架下的

.NET 框架中的 Factory 模式  

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

逻辑框架法的模式 .NET 框架中的 Factory 模式

     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  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码