Consiste en definir una interfaz para crear un objeto pero deja a las subclases el trabajo de decidir que clase instanciar, El patron Factory permite que una clase difiera la instansacion a otra subclase
Participantes:
1. Product : define una interfaz de un objeto que metodo Factory creara.
2.ConcreteProduct: implementa la interfaz Product para crear un producto en concreto.
3.Creator: declara el metodo factory que devolvera un objeto del tipo product.
4.ConcreteCreator: sobre escribe e metodo factory del creator devoler una intancia de un producto en concreto (Concreteproduct).
Generalmente este patrón se utiliza cuando no se puede anticipar el tipo de objeto que se deberá crear, o cuando una clase quiere que sus sub clases especifiquen el tipo de objetos que se crearan, de esta manera una clase delega responsabilidad a una o un grupo de sub clases.
La facilidad mas importante que no aporta este patron es que se desliga a la aplicación de vincularse con una clase en especifico, sino que a nivel de código solo se trata con una interfaz y luego se puede trabajar con cualquier clase ConcretProduct .
De esta manera tenemos mayor flexibilidad a la hora de crear objetos que hacerlo de manera directa.
El patron de diseño factory consiste en utilizar una clase constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.
Ejemplo De Patron de Diseño Factory en Java:
// Definimos la clase abstracta constructora
public abstract class Creator{
// Operación que realiza
public Product anOperation() {
return factoryMethod();
}
--- Se define el creador concreto:---
// Definimos método abstracto
protected abstract Product factoryMethod();
public class ConcreteCreator extends Creator{
protected Product factoryMethod() {
return new ConcreteProduct();
}
}
--- Se define el producto y su implementacion concreta ---
public interface Product{
public void operacion();
}
public class ConcreteProduct implements Product{
public void operacion(){
System.out.println("Una operación de este producto");
}
}
--- Ejemplo de uso ---
public static void main(String args[]){
Creator aCreator;
aCreator = new ConcreteCreator();
Product producto = aCreator.anOperation();
producto.operacion();
}
}
Ejemplo de Diagrama de clases usando el patrón
de diseño Abstract Factory
Bibliografia:
Extraído de: