.NET 框架中的 Factory 模式
来源:互联网 发布:linux内核编程实例 编辑:程序博客网 时间:2024/06/14 08:01
导读:
Factory 模式是一种非常基本同时也是被广泛使用的设计模式, 我在这里就不多说了,这种模式在框架程序设
计中经常被采用,今天就说一下在.NET 框架下的一个使用例子。
首先请大家看一下如下代码段:
www_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中同样也
会出现工厂模式所不可回避的问题就是如果新增加一种编码怎么办?让我们看看微软所做的一些"尝试": bbs.bitsCN.com中国网管论坛
在GetEncoding(Int32)函数里的switch 有如下代码 DL@bitsCN_com网管软件下载
switch (codepage)
{
.......
default:
unicode = GetEncodingCodePage(codepage);
if (unicode == null)
{
unicode = GetEncodingRare(codepage); //当编码很少见时
}
break;
......
}
www_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框架时的“副产品”,因此里面的内容可读性不强,同时肯定会有偏颇之
处。如果大家有不同意见,希望回复本人,以纠正本人的误解,希望不要误导大家:) bbs.bitsCN.com
本文转自
http://www.bitscn.com/dotnet/framework/200709/109657.html
Factory 模式是一种非常基本同时也是被广泛使用的设计模式, 我在这里就不多说了,这种模式在框架程序设
计中经常被采用,今天就说一下在.NET 框架下的一个使用例子。
首先请大家看一下如下代码段:
www_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中同样也
会出现工厂模式所不可回避的问题就是如果新增加一种编码怎么办?让我们看看微软所做的一些"尝试": bbs.bitsCN.com中国网管论坛
在GetEncoding(Int32)函数里的switch 有如下代码 DL@bitsCN_com网管软件下载
switch (codepage)
{
.......
default:
unicode = GetEncodingCodePage(codepage);
if (unicode == null)
{
unicode = GetEncodingRare(codepage); //当编码很少见时
}
break;
......
}
www_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框架时的“副产品”,因此里面的内容可读性不强,同时肯定会有偏颇之
处。如果大家有不同意见,希望回复本人,以纠正本人的误解,希望不要误导大家:) bbs.bitsCN.com
本文转自
http://www.bitscn.com/dotnet/framework/200709/109657.html
- .NET 框架中的 Factory 模式
- .NET 框架中的 Factory 模式
- .NET 框架中的 Factory 模式
- .NET 框架中的 Factory 模式
- Factory Method模式在框架中的运用
- .Net中的设计模式——Factory Method模式
- .Net中的设计模式——Factory Method模式
- .Net中的设计模式——Factory Method模式
- .Net中的设计模式——Factory Method模式
- .Net中的设计模式——Factory Method模式
- .Net中的设计模式——Factory Method模式
- Net中的设计模式——Factory Method模式
- NET框架中的 Observer 模式
- NET框架中的 Observer 模式
- [.NET 设计模式] Abstract Factory
- NET框架中的 Decorator 和 Strategy 模式
- .net 工厂方法模式(Factory Method)
- MFC中的设计模式之厂(Factory)
- .NET开发者们都已经长大了吗?
- Microsoft.NET Framework 3.0版本发布
- .NET的异常处理的几个误区
- DOTNET:LINQ与ADO.NET 3.0的创新
- 如何对DataTable进行检索和排序
- .NET 框架中的 Factory 模式
- 字符串的驻留(String Interning)
- .NET与J2EE只能是敌人吗
- 针对构架师的.NET 3.0介绍
- 将自定义.NET控件嵌入IE浏览器
- 漫长的学车历程胜利结束,总结路考夜考步骤
- 一小时学会几种设计模式
- 军衔
- 给TreeView设置背景图片-------即将TreeView的背景设为透明的方法