Why do static Create methods exist?

design-patterns, factory-pattern, language-agnostic, oop

Solution

XmlReader is an abstract class. You cannot instantiate it.

Providing a `Create` method is an instance of the factory pattern. Depending on the specified arguments a different implementation of XmlReader is chosen and returned. For example, there are validating and non-validating XmlReader implementations in the .NET framework.

Problem

I was wondering, why do static `Create` methods exist? For instance, why use this code: ``` System.Xml.XmlReader reader = System.Xml.XmlReader.Create(inputUri); ``` over this code: ``` System.Xml.XmlReader reader = new System.Xml.XmlReader(inputUri); ``` I cannot find the rationale for using one over the other, and can't find any relation between classes who use this construct over the other. Can anyone shed some light on this?

Original source