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;
}
}


Producto
public interface Figura {
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);
}
}


Producto Concreto
public class Cuadrado implements Figura {
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