Um certo padrão de projeto (design pattern) de criação
utiliza métodos para criar objetos sem que o chamador
precise especificar a classe exata desses objetos, e
sem invocar seu construtor diretamente. O método que
define a classe a ser instanciada pode estar especificado em uma interface e ser codificado em classes que a
implementam, ou então ser implementado em uma classe base e opcionalmente redefinido (overriden) em uma
classe filha. Esse padrão de projeto é conhecido como