Patrón de diseño: patrón de fábrica

El patrón de fábrica es uno de los patrones de diseño más utilizados en Java. Este tipo de patrón de diseño se incluye en el patrón de creación, ya que este patrón proporciona una de las mejores formas de crear un objeto.

En el patrón de fábrica, creamos un objeto sin exponer la lógica de creación al cliente y nos referimos al objeto recién creado usando una interfaz común.

Implementación

Vamos a crear una interfaz Shape y clases concretas implementando la interfaz Shape . Una clase de fábrica ShapeFactory se define como el siguiente paso.

FactoryPatternDemo , nuestra clase de demostración utilizará ShapeFactory para obtener un objeto Shape . Pasará información ( CÍRCULO / RECTÁNGULO / CUADRADO ) a ShapeFactory para obtener el tipo de objeto que necesita.

Paso 1

Crea una interfaz.

Shape.java

public interface Shape {
   void draw();
}

Paso 2

Crea clases concretas implementando la misma interfaz.

Rectángulo.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

Paso 3

Cree una fábrica para generar un objeto de clase concreta basado en información dada.

ShapeFactory.java

public class ShapeFactory {
	
   //use getShape method to get object of type shape 
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }		
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
         
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
         
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      
      return null;
   }
}

Paso 4

Utilice Factory para obtener un objeto de una clase concreta pasando una información como el tipo.

FactoryPatternDemo.java

public class FactoryPatternDemo {

   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();

      //get an object of Circle and call its draw method.
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //call draw method of Circle
      shape1.draw();

      //get an object of Rectangle and call its draw method.
      Shape shape2 = shapeFactory.getShape("RECTANGLE");

      //call draw method of Rectangle
      shape2.draw();

      //get an object of Square and call its draw method.
      Shape shape3 = shapeFactory.getShape("SQUARE");

      //call draw method of square
      shape3.draw();
   }
}

Paso 5

Verifique la salida.

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.