2011-11-30 14 views

Respuesta

20

Una fábrica crea objetos para que, cuando se le solicite.

El localizador de servicios devuelve objetos que ya pueden existir, es decir, servicios que pueden existir en alguna parte para usted.

Basta con pensar en el significado de los nombres:

  • fábrica: es un lugar donde se crean los objetos.
  • Servicio: es algo que puede hacer algo por usted como un servicio.
  • Localizador de servicios: es algo que puede encontrar algo que puede realizar un servicio.
+0

El servicio al final es una clase, que hace algo. Para recuperarlo, tiene que crearse así ... el Localizador de servicios es como una fábrica, porque tiene que hacer un "nuevo" – toroveneno

+3

No tiene que crear un nuevo objeto de servicio ... en cambio, el objeto de servicio será registrado antes de tratar de localizar el servicio, podría ser cuando se inicia la aplicación, de modo que en el futuro el localizador de servicios pueda devolver ese servicio a la persona que llama. –

+0

Como la "simplicidad" de la respuesta – Spock

6

En realidad, existe una clara separación entre ambos patrones. Es común saber que ambos patrones se usan para evitar dependencias de tipos concretos.

Sin embargo después de leer

Algunas contradicciones graves surge:

Seemann dijo: "Una fábrica de extracto es un tipo genérico, y el El tipo de devolución del método Create está determinado por el tipo de fábrica propiamente dicho. En otras palabras, un tipo construido solo puede devolver instancias de un solo tipo ".

Mientras que Rober C. Martin no mencionó nada sobre los tipos genéricos y, además, el ejemplo de fábrica en su libro permite crear una instancia de más de un tipo de objetos para distinguirlos utilizando una cadena clave como parámetro en Factory.Make().

Gamma dijo que la intención de Abstract Factory es "Proporcionar una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas". Vale la pena mencionar que el ejemplo de Gamma Abstract Factory viola el Principio de segregación de interfaz (ISP) establecido por Martin. ISP y SOLID en general son principios más modernos o tal vez por simplicidad cuando se omiten.

Las obras de Gamma y Martin preceden a Seemann's, por lo que creo que debería seguir la definición ya hecha.

Si bien Fowler propone el Localizador de servicios como una forma de implementar la Inversión de dependencia, Seemann lo considera como un antipatrón. Ni Gamma ni Martin mencionan el Localizador de servicios.

Sin embargo, Seemann y Fowler coincidieron en que Service Locator necesita un paso de configuración para registrar una instancia de una clase concretes, esa instancia es la que se devolverá más adelante cuando se solicite un objeto de ese tipo. Martin o Gamma no mencionan este paso de configuración en su definición de Abstract Factory. El patrón abstracto de fábrica supone un nuevo objeto para ser instanciado cada vez que se solicita un objeto de ese tipo.

Conclusión

La principal diferencia entre el Servicio de Localización y Abstract Factory es que supongamos Resumen de fábrica un nuevo objeto de crear una instancia de un devuelto en cada solicitado y Servicio de localización necesita ser configurado con una instancia de objeto y cada vez que el la misma instancia será devuelta.

Cuestiones relacionadas