2010-07-28 8 views
9

posibles duplicados:
Factory Pattern. When to use factory methods?
Why do static Create methods exist?Por qué debe uno usar el método de fábrica para crear objetos

Aunque sé lo que es la fábrica del diseño del patrón. Pero no puedo comprender cuáles son los beneficios de usarlo. ¿Por qué deberíamos crear objetos usando Factory Design Pattern?

+0

¿Responde esto a su pregunta ?: http://stackoverflow.com/questions/2470290/why-do-static-create-methods-exist – Kobi

+0

Duplicado exacto: http://stackoverflow.com/questions/69849/factory -pattern-when-to-use-factory-methods/2430719 # 2430719 – kyoryu

Respuesta

9

Al crear objetos a través de fábricas, evita que el código del subsistema dependa de implementaciones específicas de las interfaces que utiliza - "programar en una interfaz, no en una implementación" es la frase más importante en los "Patrones de diseño" libro, y las fábricas son una forma crucial de mover su código hacia ese objetivo excelente (la inyección de dependencia es otra DP clave para eso, que el libro clásico no cubre, pero entonces, a menudo las dependencias que usted inyecta son fábricas de todos modos, entonces esa omisión no es demasiado horrible ;-).

+0

Dependency Injection parece ser una de las cosas que el libro de GoF supuso – kyoryu

3

1-Fácil de implementar.

El código de la aplicación 2-Cliente no tiene que cambiar drásticamente.

La creación de 3 clases es abstracta del código del cliente.

También puede comprobar este hilo Factory Pattern. When to use factory methods?

+0

Gracias. Me gustaba mucho esa respuesta :) – kyoryu

4

Usted tiene varias ventajas con método de fábrica

  1. Puede evitar la creación de objetos duplicados (si los objetos son inmutables). La fábrica puede devolver el mismo objeto para el mismo conjunto de parámetros.
  2. Puede crear y devolver cualquier subtipo del tipo que la fábrica está diseñada para crear. Reemplazo de implementaciones sin cambiar el código del cliente (código de llamada).
  3. Puede devolver el mismo objeto todas las veces (en otras palabras, singleton si la única forma de obtener el objeto es de fábrica).
1

La idea básica detrás de esto es crear control.

El cliente llama a un método
object Factory.GetObject(Spec spec)

Ahora la fábrica es una abstracción que impide que los clientes de codificar/bicarbonato en los constructores de clase en su código. En su lugar, llaman a la fábrica, la fábrica decide la subclase correcta de objeto para crear en función de la especificación.

Este enfoque es más extensible y resistente al cambio - en el futuro,

  • se podría añadir un nuevo parámetro de ajuste con la especificación y manejarlo dentro del método de fábrica para devolver el LatestAndGreatestSubclass
  • podría mejorar un objeto existente y devolver v2 de la subclase o intercambio anterior con una implementación completamente diferente: los clientes existentes y la interfaz de método de fábrica no tendrían que cambiar.

El comentario se hizo demasiado largo ... Así que tuve que publicarlo como respuesta.

Cuestiones relacionadas