为什么存在静态Create方法?

GeR*_*ReV 14 language-agnostic oop design-patterns factory-pattern

我在想,为什么Create存在静态方法?

例如,为什么要使用此代码:

System.Xml.XmlReader reader = System.Xml.XmlReader.Create(inputUri);
Run Code Online (Sandbox Code Playgroud)

在这段代码上:

System.Xml.XmlReader reader = new System.Xml.XmlReader(inputUri);
Run Code Online (Sandbox Code Playgroud)

我找不到使用one over other的理由,也找不到使用这个构造的类与其他类之间的任何关系.

任何人都可以对此有所了解吗?

dtb*_*dtb 17

XmlReader是一个抽象类.你无法实例化它.

提供Create方法是工厂模式的实例.根据指定的参数,选择并返回不同的XmlReader实现.例如,.NET框架中有验证和非验证的XmlReader实现.


Zac*_*ght 6

更一般的答案......

人们喜欢这种方法的原因,被称为"静态工厂方法",是因为你可以给它们一个名字(而不是构造函数).因此,如果您需要三个不同的构造函数,则可以创建静态工厂方法,这些方法的名称与其使用相关.

另一个原因是工厂方法实际上并不需要创建新对象 - 如果需要,它可以反复返回相同的对象.