GeeksforGeeks (Español)

El método de fábrica es un patrón de diseño de creación, es decir, relacionado con la creación de objetos. En el patrón de fábrica, creamos objetos sin exponer la lógica de creación al cliente y el cliente usa la misma interfaz común para crear un nuevo tipo de objeto.
La idea es usar una función miembro estática (método de fábrica estática) que crea & devuelve instancias, ocultando los detalles de los módulos de clase al usuario.

Un patrón de fábrica es uno de los principios de diseño básicos para crear un objeto, lo que permite a los clientes crear objetos de una biblioteca (explicado a continuación) de tal manera que no tenga un acoplamiento estrecho con la jerarquía de clases de la biblioteca.

¿Qué significa cuando hablamos de biblioteca y clientes?
Una biblioteca es algo que proporciona un tercero que expone algunas API públicas y los clientes realizan llamadas a esas API públicas para completar su tarea. Un ejemplo muy simple pueden ser los diferentes tipos de vistas que proporciona el sistema operativo Android.

¿Por qué el patrón de fábrica?
Vamos a entenderlo con un ejemplo:



Resultado:

I am two wheeler

¿Cuáles son los problemas con el diseño anterior?
Como debe haber observado en el ejemplo anterior, el Cliente crea objetos de TwoWheeler o FourWheeler basado en alguna entrada durante la construcción de su objeto.
Digamos, la biblioteca presenta una nueva clase ThreeWheeler para incorporar también vehículos de tres ruedas. ¿Qué pasaría? El cliente terminará encadenando un nuevo else if en la escalera condicional para crear objetos de ThreeWheeler. Lo que a su vez necesitará que se vuelva a compilar el Cliente. Por lo tanto, cada vez que se realiza un nuevo cambio en el lado de la biblioteca, el Cliente debería realizar algunos cambios correspondientes al final y volver a compilar el código. ¿Suena mal? Esta es una práctica de diseño muy mala.

¿Cómo evitar el problema?
La respuesta es crear un método estático (o de fábrica). Veamos el código a continuación.



Salida:

I am three wheeler

En el ejemplo anterior, hemos desacoplado totalmente la selección del tipo para la creación de objetos del Cliente. La biblioteca ahora es responsable de decidir qué tipo de objeto crear en función de una entrada. El cliente solo necesita hacer una llamada al método Create de fábrica de la biblioteca y pasar el tipo que desee sin preocuparse por la implementación real de la creación de objetos.

Gracias a Rumplestiltskin por proporcionar la explicación anterior.

Otros ejemplos del método de fábrica:

  1. Digamos, en un sistema de ‘Dibujo’, dependiendo de la entrada del usuario, se pueden dibujar diferentes imágenes como cuadrados, rectángulos, círculos. Aquí podemos usar el método de fábrica para crear instancias según la entrada del usuario. Para agregar un nuevo tipo de forma, no es necesario cambiar el código del cliente.
  2. Otro ejemplo: en el sitio de viajes, podemos reservar boletos de tren, así como boletos de autobús y boletos de avión. En este caso, el usuario puede dar su tipo de viaje como ‘autobús’, ‘tren’ o ‘vuelo’.
    Aquí tenemos una clase abstracta ‘AnyTravel’ con una función miembro estática ‘GetObject’ que, dependiendo del tipo de viaje del usuario, crear & objeto de retorno de ‘BusTravel’ o ‘TrainTravel’. «BusTravel» o «TrainTravel» tienen funciones comunes como el nombre del pasajero, el origen y los parámetros de destino.

Gracias a Abhijit Saha por proporcionar los primeros 2 ejemplos.

Write a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *