0% encontró este documento útil (0 votos)
53 vistas11 páginas

Patrón de Diseño Factory Method

El patrón Factory Method ayuda a crear objetos sin especificar la clase a la que pertenecen y otorga varios métodos utilizados según la demanda. Define una interfaz común para los objetos creados y una clase abstracta con un método factory que devuelve objetos de tipo producto. Las subclases concretas implementan el método factory para crear instancias específicas.

Cargado por

velmord.06
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
53 vistas11 páginas

Patrón de Diseño Factory Method

El patrón Factory Method ayuda a crear objetos sin especificar la clase a la que pertenecen y otorga varios métodos utilizados según la demanda. Define una interfaz común para los objetos creados y una clase abstracta con un método factory que devuelve objetos de tipo producto. Las subclases concretas implementan el método factory para crear instancias específicas.

Cargado por

velmord.06
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

FACTORY METHOD

1. Nombre del patrón:

Factory Method

2. Clasificación del patrón:

El patrón de diseño Factory Method pertenece a la categoría de patrones creacionales.


Los patrones creacionales se centran en la creación de objetos de manera flexible y
desacoplada. Estos patrones proporcionan mecanismos para instanciar objetos de
diferentes formas, ocultando los detalles de la creación y facilitando la reutilización del
código.

3. Intención:

El problema surge cuando quieres crear una nueva clase para un objeto, debido a que
las clases no son flexibles y debes crear uno para cada instancia, y así también
otorgarle métodos; por ende, se tiene que modificar el código cada vez que sea
necesario, lo cual generaría un desorden y pérdida de tiempo. Por ello el patrón de
diseño Factory Method, ayuda a crear objetos sin especificar en la clase a la que
pertenecen, y otorga varios métodos que se utilizarían de acuerdo a la demanda de
cada uno, para evitar ir directamente al código para realizar los cambios.

4. También conocido como:

-Constructor Virtual (Virtual Constructor)

-Constructor Polimórfico (Polymorphic Constructor)

-Método Constructor (Constructor Method)

5. Motivación (ejemplo de escenario de aplicación)

Escenario: Creación de un sistema de gestión de empleados

Queremos desarrollar un sistema de gestión de empleados para una empresa. Una


de las funcionalidades principales del sistema es la capacidad de crear diferentes tipos
de empleados, como empleados regulares, gerentes y contratistas.

En este escenario, podemos aplicar el patrón Factory para crear instancias de


empleados de manera eficiente y centralizada.
Definición de la interfaz:

Primero, creamos una interfaz llamada "Empleado" que define los métodos comunes
que deben tener todos los tipos de empleados, como obtener información personal,
calcular el salario, etc.

Implementación de las clases concretas:

A continuación, creamos las clases concretas que implementan la interfaz


"Empleado". Por ejemplo, podemos tener las clases "EmpleadoRegular", "Gerente"
y "Contratista", cada una con sus propias implementaciones de los métodos
definidos en la interfaz.
Creación de la clase Factory:

A continuación, creamos una clase llamada "FabricaEmpleados" que actúa como una
fábrica para crear instancias de empleados. Esta clase tiene un método llamado
"crearEmpleado" que acepta un parámetro para indicar el tipo de empleado que se
desea crear.

Dentro del método "crearEmpleado", utilizamos una estructura condicional (como un


switch o if-else) para determinar qué tipo de empleado se debe crear. Según el tipo de
empleado especificado, la fábrica crea y devuelve una instancia del empleado
correspondiente.

Implementación del código cliente:

Por último, en el código cliente, utilizamos la clase "FabricaEmpleados" para crear


instancias de empleados sin necesidad de conocer los detalles de implementación de
cada tipo de empleado.

Por ejemplo, en el código cliente, podríamos llamar a la fábrica para crear un


empleado regular y luego usar los métodos de la interfaz "Empleado" para interactuar
con ese objeto sin preocuparnos por los detalles internos de cómo se crea y se
comporta ese empleado en particular.

6. Aplicabilidad:

Se utiliza para crear objetos sin especificar explícitamente la clase exacta del objeto
que se creará. En lugar de eso, se define una interfaz o clase base común que tiene
un método de fábrica para crear objetos. Cada clase derivada de esta interfaz o
clase base puede implementar el método de fábrica de acuerdo a sus necesidades
específicas.
7. Estructura y clases participantes:

Creator: Es la clase abstracta que declara el método FactoryMethod(), que devuelve


un objeto del tipo Product. También puede contener otros métodos y lógica
relacionados con la creación y manipulación de objetos.

ConcreteCreator: Es una subclase de Creator que implementa el método


FactoryMethod(). Esta clase decide qué tipo concreto de producto debe crear y
devuelve una instancia de la subclase correspondiente de Product.

Product: Es la clase abstracta o interfaz que define la interfaz del objeto que será
creado por el FactoryMethod(). Puede contener métodos comunes que serán
implementados por las subclases concretas.

ConcreteProductA y ConcreteProductB: Son subclases de Product que


representan variantes concretas del objeto que se creará. Implementan los métodos
definidos en la clase Product.

En este diagrama, el Creator encapsula la lógica de creación de objetos y utiliza el


FactoryMethod() para crear instancias de productos. Las subclases de
ConcreteCreator implementan el FactoryMethod() y deciden qué tipo concreto de
producto crear. Las subclases de Product definen las implementaciones específicas
de cada variante del producto.

8. Colaboraciones:

Las interrelaciones entre los participantes se dan de la siguiente manera:

• La clase base otorga la interfaz que tendrán en común los objetos creados por el
Factory method, y esta será implementada por las subclases.
• La clase concreta es la que implementa la interfaz de la clase base y es la
responsable de crear objetos concretos, además de poder agregar más funciones
a los objetos ya creados.
• El Factory method es el encargado de crear los objetos y es implementado por la
clase Factory, que con la lógica determinada puede decidir qué clase concreta se
va a instanciar.
• La subclase concreta heredada de la clase Factory y es la responsable de
implementar el factory method. Además, es la encargada de decidir qué clase
concreta va a instanciar, y el objeto de esa clase se devuelve.

9. Consecuencias:

Consecuencias positivas:

• Desacoplamiento: el patrón del método de fábrica le permite desacoplar la


creación de un objeto de su implementación concreta, lo que facilita la
implementación de nuevos productos sin cambiar el código existente.
• Extensibilidad: las nuevas variantes de productos se pueden agregar fácilmente
al sistema mediante la creación de nuevas clases de productos y constructores
específicos.
• Simplifique el código del cliente: el código del cliente se centra en la lógica
comercial y no necesita conocer los detalles de cómo se crea un objeto.
• Reutilización de código: se puede usar un código de cliente para procesar
diferentes variantes de productos.

Consecuencias negativas:

• Mayor complejidad: la implementación de un modelo de método de fábrica puede


complicar el diseño del sistema, especialmente en sistemas más simples.
• Aumenta el número de clases: Cree nuevas clases de productos y constructores
concretos, lo que aumenta el tamaño del código y el número de archivos en el
proyecto.
• Acoplamiento implícito: si se usa incorrectamente, el método de fábrica
introducirá un acoplamiento indirecto entre el constructor y la clase concreta, lo
que dificultará el flujo de ejecución y la interacción entre las clases.

10. Implementación:

Es aconsejable establecer una interfaz estándar para todos los productos, donde se
definan los métodos relevantes en todos los casos. Esto permite abordar todos los
productos de manera coherente y simplifica la sustitución de un producto por otro en
el código del cliente.

Incluye un Factory Method sin implementación dentro de la clase creadora. El tipo de


retorno de este método debe ser compatible con la interfaz común de los productos.
El propósito es establecer una estructura uniforme en todas las clases creadoras y
permitir que cada una de ellas implemente el Factory Method de acuerdo con su lógica
específica.

Identifica todas las instancias de constructores de productos en el código de la clase


creadora y reemplázalas por llamadas al Factory Method. Mueve el código de creación
de productos al Factory Method correspondiente. De esta manera, la responsabilidad
de crear productos recae en el Factory Method en lugar de la clase creadora.

A veces es necesario agregar un parámetro temporal al Factory Method para controlar


el tipo de producto devuelto. Sin embargo, se recomienda considerar este enfoque
como una solución provisional y buscar alternativas más flexibles, como el uso de
subclases creadoras o el patrón Abstract Factory, si la complejidad del código
aumenta.

Para mejorar la legibilidad del código del Factory Method, es recomendable considerar
el uso de subclases creadoras para cada tipo de producto en lugar de utilizar un largo
operador switch o una lógica compleja de selección de clases de producto. Con este
enfoque, cada subclase creadora puede sobrescribir el Factory Method y extraer el
código de construcción adecuado para su tipo de producto específico. Esto
proporciona una estructura más clara y modular, evitando la necesidad de un extenso
operador switch.

Si hay una gran cantidad de tipos de productos y no es práctico crear subclases para
cada uno de ellos, se puede reutilizar el parámetro de control en las subclases
creadoras. Por ejemplo, si el parámetro de control es una cadena que representa el
tipo de producto, cada subclase creadora puede utilizar este parámetro para
determinar qué clase de producto debe instanciar. Esto evita la necesidad de crear
subclases para cada tipo de producto y permite una implementación más flexible y
adaptable.

Después de realizar las extracciones necesarias, es posible que el Factory Method


base quede vacío. En este caso, se puede convertir en un Factory Method abstracto,
lo que implica que las subclases creadoras deben implementarlo obligatoriamente. Si
aún hay código dentro del Factory Method base, se puede convertir en un
comportamiento por defecto del método, proporcionando una implementación básica
para los casos en los que las subclases creadoras no necesiten realizar
modificaciones. Esta estrategia permite una mayor flexibilidad al permitir que las
subclases decidan si desean personalizar la implementación o utilizar el
comportamiento por defecto.
11. Código de ejemplo:
12. Usos conocidos:

Los métodos de fábrica tienen varias aplicaciones en escenarios de la vida real,


especialmente en el desarrollo de software. Estos son algunos ejemplos de su uso:

● Conexiones de base de datos: cuando se trabaja con bases de datos, se


pueden emplear métodos de fábrica para crear objetos de conexión de base
de datos. El método de fábrica puede determinar el controlador y la
configuración de la base de datos adecuados según las entradas, como los
parámetros de conexión, el tipo de base de datos o los requisitos de
agrupación de conexiones.
● Sistemas de registro: en los marcos de registro, los métodos de fábrica se
utilizan a menudo para crear instancias de registradores. El método de fábrica
puede configurar y devolver la implementación de registrador adecuada en
función de factores como el nivel de registro, el destino de registro (archivo,
consola, red) o la configuración de registro personalizada.
● Creación de componentes de GUI: los marcos de trabajo de la interfaz de
usuario utilizan ampliamente métodos de fábrica para crear varios
componentes de GUI. Por ejemplo, en una aplicación gráfica, se puede usar
un método de fábrica para crear diferentes tipos de botones (p. ej., estándar,
alternar, radio) o ventanas (p. ej., diálogo, ventana principal) según parámetros
específicos o preferencias del usuario.
● Sistemas de complementos: los métodos de fábrica juegan un papel crucial
en las arquitecturas de complementos. Permiten la carga dinámica y la
creación de instancias de módulos o extensiones de complementos. El método
de fábrica puede escanear los complementos disponibles, determinar su
compatibilidad o capacidades y devolver instancias de las clases de
complementos apropiadas.
● Lectores de configuración: los métodos de fábrica se pueden usar en
sistemas que leen y procesan archivos de configuración. El método de fábrica
puede analizar los datos de configuración y crear instancias de objetos o
aplicar configuraciones en función de las propiedades de configuración
especificadas.
● Serialización/deserialización de objetos: al serializar o deserializar objetos,
se pueden usar métodos de fábrica para recrear instancias de objetos en
función de los datos serializados. El método de fábrica puede examinar los
datos serializados e instanciar la clase correcta con el estado apropiado.
● Comunicación de red: en aplicaciones de red, se pueden emplear métodos
de fábrica para crear controladores o objetos de protocolo de red. Por ejemplo,
en un sistema cliente-servidor, el método de fábrica puede crear instancias de
objetos específicos del protocolo (por ejemplo, HTTP, FTP, WebSocket) según
el protocolo de comunicación solicitado.

Estos ejemplos ilustran cómo se utilizan los métodos de fábrica en aplicaciones


prácticas, lo que permite la creación de objetos flexibles y encapsula una lógica de
creación de instancias compleja. El uso de métodos de fábrica ayuda a lograr
modularidad, extensibilidad y mantenibilidad en los sistemas de software.

13. Patrones relacionados:

Hay varios patrones de diseño que son similares a los métodos de fábrica o comparten
algunas características comunes. Aquí hay algunos notables:

● Patrón Abstract Factory: El patrón Abstract Factory proporciona una interfaz


para crear familias de objetos relacionados o dependientes sin especificar sus
clases concretas. Es similar al patrón del método de fábrica, pero se enfoca en
crear múltiples objetos relacionados en lugar de un solo objeto.
● Patrón de construcción: el patrón de construcción se utiliza para construir
objetos complejos paso a paso. Separa la construcción de un objeto de su
representación, permitiendo que un mismo proceso de construcción cree
representaciones diferentes. El patrón Builder se usa a menudo cuando hay
varias formas de construir un objeto.
● Patrón de prototipo: el patrón de prototipo implica la creación de nuevos
objetos mediante la clonación de objetos existentes. Proporciona una forma de
crear objetos basados en una instancia existente, lo que permite la creación
de nuevos objetos con propiedades predeterminadas o parcialmente
inicializadas.
● Patrón Singleton: El patrón Singleton restringe la creación de instancias de
una clase a una sola instancia accesible globalmente a través de la aplicación.
Al igual que el patrón del método de fábrica, controla la creación de objetos
pero garantiza que solo se cree una instancia.
● Patrón de grupo de objetos: el patrón de grupo de objetos administra un
grupo de objetos reutilizables para mejorar el rendimiento. Proporciona una
forma de obtener objetos del grupo y devolverlos una vez que ya no se
necesitan. La piscina puede verse como una fábrica que crea y gestiona
objetos para su reutilización.
● Patrón de estrategia: el patrón de estrategia define una familia de algoritmos
intercambiables y encapsula cada algoritmo por separado. Permite al cliente
elegir el algoritmo apropiado en tiempo de ejecución. Si bien se enfoca más en
el comportamiento que en la creación de objetos, comparte la idea de
encapsular diferentes opciones de implementación.

Estos patrones de diseño exhiben similitudes con el patrón del método de fábrica en
términos de encapsular la creación de objetos, desacoplar el código del cliente de las
clases concretas y promover la flexibilidad y la extensibilidad. Cada patrón tiene su
propio propósito y casos de uso específicos, pero todos contribuyen a mejorar el
diseño general y la capacidad de mantenimiento de los sistemas de software.

REFERENCIAS:
Blancarte, O. (2021). Introducción a los patrones de diseño. Recuperado en el año 2023 de
[Link]

Max, M. (2011). Factory Method. Recuperado en el año 2014 de


[Link]

AUTORES: Mauricci Becerra, Leandro; Rodríguez Gonzales, Alejandro Valentino; Alfaro


Loyola, Emilio Jean Pierre; Gutiérrez Guzmán, César Eduardo; Jara Tirado, Diego Francesco;
Parimango Palacios, Alejandro Esteban; Bautista Reyes, Lourdes Yolanda.

También podría gustarte