.NET Framework中的构造函数与工厂版

Ste*_*eve 2 .net design-patterns factory-pattern

下面是一篇关于.net框架模式使用的文章.我不确定我是否理解下面摘录中的粗体部分.是否暗示如果更改创建对象的细节,您(可能)更改构造函数参数?

在框架中有许多情况下,您可以获取结构或类的新实例,而无需自己调用其构造函数.System.Convert类包含许多像这样工作的静态方法.例如,要将整数转换为布尔值,可以调用Convert.ToBoolean并传入整数.如果整数为非零,则此方法调用的返回值为新布尔值设置为"true",否则为"false".Convert类为您创建具有正确值的布尔值.其他类型转换方法类似地工作.Int32和Double上的Parse方法将这些对象的新实例设置为仅给定字符串的适当值.

这种创建新对象实例的策略称为工厂模式.您可以要求对象工厂为您创建实例,而不是调用对象的构造函数.这样,工厂类可以隐藏对象创建的复杂性(比如如何从字符串中解析Double).如果你想改变创建对象的细节,你只需要改变工厂本身; 您不必更改调用构造函数的代码中的每个位置.

来自:http://msdn.microsoft.com/en-us/magazine/cc188707.aspx.

Ree*_*sey 11

我实际上认为他们提供的例子不一定是很好的例子.

当您构建类时,Factory模式在.NET中变得更有用.例如,查看WebRequest类.

这个类通常通过调用实例化:

WebRequest request = WebRequest.Create(url);
Run Code Online (Sandbox Code Playgroud)

WebRequest.Create方法使用工厂模式.根据URL的类型,它将创建WebRequest的不同类型(子类).http://例如,如果你传递一个url,你实际上会创建一个HttpWebRequest实例 - 一个ftp://URL将创建一个FtpWebRequest.

通过在此处使用Factory模式,可以在以后添加更多URL类型而无需更改客户端上的任何代码 - 您只需传入不同的URL(作为字符串),并获取新对象.

  • 你在谈论工厂方法模式.但原始问题是指工厂模式(参见http://en.wikipedia.org/wiki/Factory_pattern),它涵盖了我在下面描述的工厂方法模式和抽象工厂模式. (2认同)