Por que a classe Java Pattern usa um método de fábrica em vez de construtor?
-
21-08-2019 - |
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.
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 Pattern
s 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).