2009-10-15 12 views
14

Es común que las clases de fábrica sean estáticas y los métodos de fábrica también sean estáticos.Métodos de creación de fábrica ¿Siempre estáticos?

¿Alguna vez el GOF en el libro de Patrones de diseño estipuló que las fábricas y sus métodos DEBEN ser estáticos para cumplir con la estricta definición del patrón?

Está teniendo fábricas +/métodos estáticos solo una consecuencia del patrón? los datos de estado normalmente no son mantenidos por la clase de fábrica, por lo que normalmente son estáticos.

Respuesta

11

No creo que exista una "definición estricta" de un patrón. Por su naturaleza, existen patrones para capturar la esencia de un problema que surge una y otra vez en el software y delinear cómo se vería una solución.

Específicamente con el patrón de fábrica, no, no hay ningún requisito de que los métodos de fábrica sean estáticos. La esencia del patrón es que tienes un objeto que es responsable de crear instancias de otra clase. Cómo lo hace depende de usted, aunque una forma común, como se describe en el patrón, es utilizar un método estático en una clase. Sin embargo, tenemos un mecanismo de fábrica en uno de nuestros sistemas, que en realidad es de dos etapas. Utiliza un método estático en una clase para crear el objeto de fábrica, que se puede configurar para elegir entre un conjunto de implementaciones, y luego usar el objeto de fábrica para eliminar las instancias del objeto que necesita para realizar el trabajo real.

Considere también la implementación del patrón de fábrica en un idioma que no tiene métodos estáticos. Por ejemplo, en Scala usarías un objeto en lugar de una clase. Aunque el comportamiento de esto es muy parecido al uso de métodos estáticos en una clase en Java, la naturaleza de la implementación es bastante diferente.

+2

+1 es muy importante no esperar que los patrones piensen por usted, los patrones no son estrictos, los patrones no son indulgentes, ¡los patrones no están bajo control! – djna

6

No, las fábricas pueden contener el estado. Depende de lo que se necesita.

Sugeriría que hacer es estático parece una buena elección en primera instancia - hovewer en el momento en que trata de probar la estática que tiende a tener problemas.

Aléjate hasta que las necesites específicamente.

+0

En algunos idiomas –

3

No, la clase de fábrica de forma predeterminada no debe ser estática. En realidad, las clases estáticas no son bienvenidas en el mundo OOP ya que también pueden transmitir algún estado y, por lo tanto, presentar el estado global de la aplicación. Si solo necesita un objeto de fábrica para estar presente, puede controlar su creación a través del patrón de singleton.

En caso de método de fábrica - está bien mantenerlo estático (en realidad no hay otra manera razonable de hacerlo :)).

0

Supongo que mi BlueCarFactory y mi RedCarFactory tienen un método createCar. Es de sentido común reutilizar el método de creación real al parametrizarlo. Entonces uno crearía un CarFactory(blue) y un CarFactory(red). Esto significa que el objeto CarFactory necesita una variable miembro para almacenar el color de los automóviles producidos.

Concluyendo: no tiene sentido hacer que el método de una clase Factory sea estático. Tiene sentido crear un objeto Factory único.

Cuestiones relacionadas