Pergunta

Há uma boa discussão sobre isso no caso Geral.

No entanto, eu estava me perguntando especificamente por que o Pattern classe usa o compile Método estático para criar um objeto, e não o construtor?

Parece -me mais intuitivo usar um construtor.

Foi útil?

Solução

A classe de padrões é mais recente do que muitas das coisas do JDK. Como tal, acredito que eles adotaram a abordagem mais moderna do uso de métodos de fábrica, em vez da abordagem mais antiga dos construtores públicos. Você não pode realmente adaptar os métodos de fábrica para as classes existentes.

De um modo geral, não há muitas razões para usar um construtor sobre um método de fábrica, então acho que é tudo o que havia. Os métodos de fábrica permitem abstrair a criação de objetos, o que pode ser bastante útil.

Outras dicas

Por que vocês dois Pattern instância do mesmo regex? Um método de criação estática permite que as implementações potencialmente cache Patternàs vezes retornando o mesmo objeto se o mesmo regex for solicitado várias vezes. Compilação Patterns pode ser caro. Também se adicional compile Os métodos se tornaram necessários (por exemplo, diferentes sintaxes), eles poderiam receber nomes diferentes em vez de um conjunto de construtores confusamente sobrecarregados.

O padrão estático de fábrica é usado quando há uma boa chance de que a implementação subjacente possa ser alterada de uma maneira que possa afetar o construtor. Em resumo, a fábrica permite uma flexibilidade significativa para o mantenedor da biblioteca sem ser preso pela compatibilidade binária e de origem no lado da construção.

Ver http://en.wikipedia.org/wiki/Factory_Method_Pattern Para detalhes - especialmente a seção 'outros benefícios e variantes'.

Usando um método de fábrica para Pattern Também poderia eventualmente permitir o uso de uma implementação de regex plug-in de terceiros. Infelizmente, a Sun não implementou nenhum dos recursos que você pode obter ao usar um método de fábrica (habilidade de plug-in, armazenamento em cache).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top