¿Cuál es la diferencia en caso de intención y aplicación entre estos dos Patrones? [cerrado]

Resuelto user366312 asked hace 15 años • 19 respuestas

Factory y Abstract Factory son ambos patrones de creación.

¿Cuál es la diferencia en caso de intención y aplicación entre estos dos Patrones?

user366312 avatar Jun 16 '09 21:06 user366312
Aceptado

Con el patrón Factory, usted produce instancias de implementaciones ( Apple, Banana, Cherry, etc.) de una interfaz en particular, por ejemplo, IFruit.

Con el patrón Abstract Factory, proporcionas una manera para que cualquiera pueda proporcionar su propia fábrica. Esto permite que su almacén sea un IFruitFactoryo un IJuiceFactory, sin necesidad de que su almacén sepa nada sobre frutas o jugos.

John Feminella avatar Jun 16 '2009 14:06 John Feminella

Fuente de esta información extraída de: http://java.dzone.com/news/intro-design-patterns-abstract

Fábrica abstracta versus método de fábrica

Los métodos de una Fábrica Abstracta se implementan como Métodos de Fábrica. Tanto el patrón de fábrica abstracto como el patrón de método de fábrica desacoplan el sistema cliente de las clases de implementación reales a través de tipos abstractos y fábricas. El método Factory crea objetos mediante herencia, mientras que Abstract Factory crea objetos mediante composición.

El patrón Abstract Factory consta de AbstractFactory, ConcreteFactory, AbstractProduct, ConcreteProduct y Client.

Cómo implementar

El patrón Abstract Factory se puede implementar utilizando el patrón Factory Method, el patrón Prototype o el patrón Singleton. El objeto ConcreteFactory se puede implementar como Singleton ya que solo se necesita una instancia del objeto ConcreteFactory.

El patrón Factory Method es una versión simplificada del patrón Abstract Factory. El patrón Factory Method es responsable de crear productos que pertenecen a una familia, mientras que el patrón Abstract Factory se ocupa de múltiples familias de productos.

El método Factory utiliza interfaces y clases abstractas para desacoplar al cliente de la clase generadora y los productos resultantes. Abstract Factory tiene un generador que es un contenedor para varios métodos de fábrica, junto con interfaces que desacoplan al cliente del generador y los productos.

Cuándo utilizar el patrón del método de fábrica

Utilice el patrón Factory Method cuando sea necesario desacoplar a un cliente de un producto particular que utiliza. Utilice el método Factory para liberar a un cliente de la responsabilidad de crear y configurar instancias de un producto.

Cuándo utilizar el patrón de fábrica abstracta

Utilice el patrón Abstract Factory cuando los clientes deban desacoplarse de las clases de productos. Especialmente útil para la configuración y modificación de programas. El patrón Abstract Factory también puede imponer restricciones sobre qué clases deben usarse con otras. Puede que requiera mucho trabajo construir nuevas fábricas de hormigón.

Ejemplos:

Ejemplo 1 de fábrica abstracta

Esta especificación de los discos para preparar distintos tipos de pasta en una máquina para hacer pasta es la Fábrica Abstracta, y cada disco en concreto es una Fábrica. Todas las fábricas (discos para hacer pasta) heredan sus propiedades de la fábrica abstracta. Cada disco individual contiene la información de cómo crear la pasta, y la máquina para hacer pasta no.

Ejemplo 2 de fábrica abstracta:

El Equipo de Estampación corresponde a la Fábrica Abstracta, ya que es una interfaz para operaciones que crean objetos de productos abstractos. Los troqueles corresponden a la Fábrica de Hormigón, ya que crean un producto de hormigón. Cada categoría de pieza (Capó, Puerta, etc.) corresponde al producto abstracto. Las piezas específicas (es decir, la puerta del lado del conductor para 99 camry) corresponden a los productos concretos.

Ejemplo de método de fábrica:

La empresa juguetera corresponde al Creador, ya que podrá utilizar la fábrica para crear objetos de producto. La división de la empresa juguetera que fabrica un tipo concreto de juguete (caballo o coche) corresponde al ConcreteCreator.

Sudhakar Kalmari avatar Apr 13 '2010 18:04 Sudhakar Kalmari

Patrón de fábrica: la fábrica produce implementaciones de productos.

Patrón de fábrica abstracto: una fábrica-fábrica produce IFactories, que a su vez produce IProducts :)

[Actualización según los comentarios]
Lo que escribí antes no es correcto al menos según Wikipedia . Una fábrica abstracta es simplemente una interfaz de fábrica. Con él, puedes cambiar tus fábricas en tiempo de ejecución, para permitir diferentes fábricas en diferentes contextos. Algunos ejemplos podrían ser diferentes fábricas para diferentes sistemas operativos, proveedores de SQL, controladores de middleware, etc.

cwap avatar Jun 16 '2009 14:06 cwap

El patrón abstracto de fábrica

  • Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.

  • El patrón Abstract Factory es muy similar al patrón Factory Method. Una diferencia entre los dos es que con el patrón Abstract Factory, una clase delega la responsabilidad de la creación de instancias de objetos a otro objeto a través de la composición, mientras que el patrón Factory Method usa herencia y depende de una subclase para manejar la creación de instancias del objeto deseado.

  • En realidad, el objeto delegado utiliza con frecuencia métodos de fábrica para realizar la creación de instancias.

Patrón de fábrica

  • Los patrones de fábrica son ejemplos de patrones creacionales.

  • Los patrones de creación abstraen el proceso de creación de instancias de objetos. Ocultan cómo se crean los objetos y ayudan a que el sistema general sea independiente de cómo se crean y componen sus objetos.

  • Los patrones de creación de clases se centran en el uso de la herencia para decidir el objeto del que se va a crear una instancia. Método de fábrica

  • Los patrones de creación de objetos se centran en la delegación de la creación de instancias a otro objeto. Abstract Factory

Referencia: Fábrica vs Fábrica abstracta

Syed Tayyab Ali avatar Jun 16 '2009 14:06 Syed Tayyab Ali