¿Cuál es la diferencia en caso de intención y aplicación entre estos dos Patrones? [cerrado]
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?
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 IFruitFactory
o un IJuiceFactory
, sin necesidad de que su almacén sepa nada sobre frutas o jugos.
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.
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.
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