¿Qué son los Patrones Creacionales?

Los patrones creacionales son un tipo de patrones de diseño que se centran en la forma en que se crean los objetos. Estos patrones abstraen el proceso de instanciación, permitiendo que el sistema sea más flexible y reutilizable. Los patrones creacionales ayudan a hacer el sistema independiente de cómo se crean, componen y representan los objetos.

Conceptos Clave

  1. Abstracción de la Creación: Los patrones creacionales proporcionan una forma de crear objetos sin especificar la clase exacta de objeto que se creará.
  2. Flexibilidad: Permiten que el código sea más flexible y fácil de mantener, ya que los detalles de la creación de objetos están encapsulados.
  3. Reutilización: Facilitan la reutilización del código al permitir la creación de objetos de manera consistente y controlada.

Tipos de Patrones Creacionales

Existen varios patrones creacionales, cada uno con su propio enfoque y propósito. Los más comunes son:

  1. Singleton: Asegura que una clase tenga una única instancia y proporciona un punto de acceso global a ella.
  2. Factory Method: Define una interfaz para crear un objeto, pero permite a las subclases alterar el tipo de objetos que se crearán.
  3. Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
  4. Builder: Separa la construcción de un objeto complejo de su representación, permitiendo que el mismo proceso de construcción cree diferentes representaciones.
  5. Prototype: Permite crear nuevos objetos copiando una instancia existente, conocida como prototipo.

Ventajas de los Patrones Creacionales

  • Encapsulación del Conocimiento de Creación: Los patrones creacionales encapsulan el conocimiento sobre qué clases se utilizan y cómo se crean.
  • Reducción de la Complejidad: Simplifican el código al eliminar la necesidad de duplicar la lógica de creación de objetos en múltiples lugares.
  • Facilidad de Cambio: Facilitan la modificación del sistema para usar diferentes clases de objetos sin cambiar el código que los utiliza.

Ejemplo Práctico: Singleton

El patrón Singleton asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a esa instancia. A continuación, se muestra un ejemplo en Python:

class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

# Uso del patrón Singleton
singleton1 = Singleton()
singleton2 = Singleton()

print(singleton1 is singleton2)  # Salida: True

Explicación del Código

  1. Clase Singleton: La clase Singleton tiene un atributo de clase _instance que almacena la única instancia de la clase.
  2. Método __new__: El método __new__ se sobrescribe para controlar la creación de nuevas instancias. Si _instance es None, se crea una nueva instancia; de lo contrario, se devuelve la instancia existente.
  3. Uso del Singleton: Al crear dos objetos singleton1 y singleton2, ambos apuntan a la misma instancia, lo que se verifica con singleton1 is singleton2.

Ejercicio Práctico

Ejercicio 1: Implementar el Patrón Factory Method

Implementa el patrón Factory Method para una clase Transport que pueda crear diferentes tipos de transporte (Car y Bike).

from abc import ABC, abstractmethod

class Transport(ABC):
    @abstractmethod
    def create_transport(self):
        pass

class Car(Transport):
    def create_transport(self):
        return "Car created"

class Bike(Transport):
    def create_transport(self):
        return "Bike created"

# Implementación del Factory Method
def transport_factory(transport_type):
    if transport_type == "car":
        return Car()
    elif transport_type == "bike":
        return Bike()
    else:
        raise ValueError("Unknown transport type")

# Uso del Factory Method
car = transport_factory("car")
bike = transport_factory("bike")

print(car.create_transport())  # Salida: Car created
print(bike.create_transport())  # Salida: Bike created

Solución del Ejercicio

  1. Clase Abstracta Transport: Define un método abstracto create_transport.
  2. Clases Concretas Car y Bike: Implementan el método create_transport.
  3. Función transport_factory: Crea instancias de Car o Bike según el tipo de transporte proporcionado.
  4. Uso del Factory Method: Se crean instancias de Car y Bike utilizando la función transport_factory.

Conclusión

En esta sección, hemos introducido los patrones creacionales, explicando su propósito y beneficios. También hemos visto ejemplos prácticos del patrón Singleton y un ejercicio sobre el patrón Factory Method. En los siguientes temas, profundizaremos en cada uno de estos patrones creacionales, proporcionando más ejemplos y ejercicios para reforzar el aprendizaje.

© Copyright 2024. Todos los derechos reservados