2009-05-13 15 views
6

Hay una buena discusión de esto en el general case.¿Por qué la clase Java Pattern usa un método de fábrica en lugar de un constructor?

Sin embargo, me preguntaba específicamente por qué la clase Pattern usa el método estático compile para crear un objeto, en lugar del constructor.

Me parece que es más intuitivo usar un constructor.

+0

Para más información, vea el artículo de [Dr. Joshua Bloch] (https://en.wikipedia.org/wiki/Joshua_Bloch), extrayendo su libro * Effective Java * (2e): [* Creando y destruyendo objetos de Java - Item 1: Considere métodos de fábrica estáticos en lugar de constructores *] (https://www.informit.com/articles/article.aspx?p=1216151) –

Respuesta

9

La clase Pattern es más nueva que muchas de las cosas en el JDK. Como tal, creo que adoptaron el enfoque más moderno de usar métodos de fábrica en lugar del enfoque anterior de los constructores públicos. Realmente no puedes adaptar los métodos de fábrica a las clases existentes.

En general, no hay muchas razones para utilizar un constructor sobre un método de fábrica, así que creo que eso es todo. Los métodos de fábrica le permiten abstraer la creación de objetos, lo que puede ser bastante útil.

6

¿Por qué ustedes dos instancia Pattern de la misma expresión regular? Un método de creación estático permite a las implementaciones potencialmente caché Pattern s devolver el mismo objeto si se solicita la misma expresión regular varias veces. Compilar Pattern s puede ser costoso. Además, si se necesitaran métodos adicionales de compile (digamos sintaxis diferentes), se les podría dar diferentes nombres en lugar de un conjunto de constructores confusamente sobrecargados.

+0

En general, su argumento es correcto. Pero este tipo de optimización debería ser opcional, creo. Sin embargo, hay muchos otros lugares donde esta optimización podría haberse aplicado. – ordnungswidrig

2

El uso de un método de fábrica para Pattern también podría permitir el uso de una implementación de expresiones regulares de plug-in de terceros. Lamentablemente, Sun no ha implementado ninguna de las características que podría obtener al usar un método de fábrica (capacidad de plug-in, almacenamiento en caché).

5

El patrón de fábrica estático se utiliza cuando existe una buena posibilidad de que la implementación subyacente se pueda modificar de forma que pueda afectar al constructor. En resumen, la fábrica permite una flexibilidad significativa para el mantenedor de la biblioteca sin estar ligado por la compatibilidad binaria y de fuente en el lado de la construcción. Para obtener más información, consulte http://en.wikipedia.org/wiki/Factory_method_pattern, especialmente la sección "Otros beneficios y variantes".

Cuestiones relacionadas