¿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
- 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á.
- 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.
- 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:
- Singleton: Asegura que una clase tenga una única instancia y proporciona un punto de acceso global a ella.
- Factory Method: Define una interfaz para crear un objeto, pero permite a las subclases alterar el tipo de objetos que se crearán.
- Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
- Builder: Separa la construcción de un objeto complejo de su representación, permitiendo que el mismo proceso de construcción cree diferentes representaciones.
- 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
- Clase Singleton: La clase
Singleton
tiene un atributo de clase_instance
que almacena la única instancia de la clase. - Método
__new__
: El método__new__
se sobrescribe para controlar la creación de nuevas instancias. Si_instance
esNone
, se crea una nueva instancia; de lo contrario, se devuelve la instancia existente. - Uso del Singleton: Al crear dos objetos
singleton1
ysingleton2
, ambos apuntan a la misma instancia, lo que se verifica consingleton1 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
- Clase Abstracta
Transport
: Define un método abstractocreate_transport
. - Clases Concretas
Car
yBike
: Implementan el métodocreate_transport
. - Función
transport_factory
: Crea instancias deCar
oBike
según el tipo de transporte proporcionado. - Uso del Factory Method: Se crean instancias de
Car
yBike
utilizando la funcióntransport_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.
Curso de Patrones de Diseño de Software
Módulo 1: Introducción a los Patrones de Diseño
- ¿Qué son los Patrones de Diseño?
- Historia y Origen de los Patrones de Diseño
- Clasificación de los Patrones de Diseño
- Ventajas y Desventajas de Usar Patrones de Diseño
Módulo 2: Patrones Creacionales
- Introducción a los Patrones Creacionales
- Singleton
- Factory Method
- Abstract Factory
- Builder
- Prototype
Módulo 3: Patrones Estructurales
Módulo 4: Patrones de Comportamiento
- Introducción a los Patrones de Comportamiento
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Módulo 5: Aplicación de Patrones de Diseño
- Cómo Seleccionar el Patrón Adecuado
- Ejemplos Prácticos de Uso de Patrones
- Patrones de Diseño en Proyectos Reales
- Refactorización Usando Patrones de Diseño
Módulo 6: Patrones de Diseño Avanzados
- Patrones de Diseño en Arquitecturas Modernas
- Patrones de Diseño en Microservicios
- Patrones de Diseño en Sistemas Distribuidos
- Patrones de Diseño en Desarrollo Ágil