FACTORY METHOD
Patrón de Diseño
Pedro Elías Jaraba Pérez

¿De qué trata?
Una Factoría consiste en una clase abstracta con métodos definidos y abstractos dedicada a construir objetos de cierto tipo de subclases.
Esta Factoría no se encarga de todo los aspectos de la creación de objetos, delegando tales responsabilidades a las subclases.
Diagrama UML
¿Cuándo usar?
- Una clase no puede anticipar qué objetos va a crear y quiere que sus subclases especifiquen dichos objetos.
- Hay clases que delegan responsabilidades en una o varias subclases.
- Una aplicación es grande y compleja (puede contener varios patrones de creación) .
Participantes
- Producto: Define una interfaz de objeto que la Factoría creará.
- Producto Concreto: Implementa la interfaz del Producto para crear el objeto en concreto.
- Creador: Declara el método Factoría que creará devolverá los objetos tipo Producto.
- Creador Concreto: Sobre escribe el método Factoría y devuelve una instancia de un objeto tipo Producto Concreto.
Ejemplo
public class Principal {
public static void main(String[] args) {
int tipo = Integer.parseInt(args[0]);
double lado = Double.parseDouble(args[0]);
Figura figura =
FiguraFactoryMethod.getFigura(tipo, lado);
System.out.println("El area de la figura es: " + figura.getArea());
}
}
Creador
public interface FiguraFactoryMethod {
public final static int CUADRADO = 0;
public final static int CIRCULO = 1;
public Figura getFigura(int tipo, double lado);
}
}
Creador Concreto
public class FiguraFactory implements FiguraFactoryMethod {
publicFigura getFigura(int tipo, double lado) {
switch (tipo) {
case CUADRADO:
return new Cuadrado(lado);
case CIRCULO:
return new Circulo(lado);
}
return null;
}
}
publicFigura getFigura(int tipo, double lado) {
switch (tipo) {
case CUADRADO:
return new Cuadrado(lado);
case CIRCULO:
return new Circulo(lado);
}
return null;
}
}
Producto
public interface Figura {
public double getArea();
}
public double getArea();
}
Producto Concreto
public class Circulo implements Figura {
double radio;
public Circulo(double radio) {
this.radio = radio;
}
public double getArea() {
return (3.14 * radio * radio);
}
}
double radio;
public Circulo(double radio) {
this.radio = radio;
}
public double getArea() {
return (3.14 * radio * radio);
}
}
Producto Concreto
public class Cuadrado implements Figura {
double lado;
public Cuadrado(double lado) {
this.lado = lado;
}
public double getArea() {
return lado * lado;
}
}
double lado;
public Cuadrado(double lado) {
this.lado = lado;
}
public double getArea() {
return lado * lado;
}
}
BIBLIOGRAFÍA
Factory Method
By Pedro Jaraba
Factory Method
Patrón de diseño Factory Method
- 973