¿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: TrueExplicación del Código
- Clase Singleton: La clase
Singletontiene un atributo de clase_instanceque 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_instanceesNone, se crea una nueva instancia; de lo contrario, se devuelve la instancia existente. - Uso del Singleton: Al crear dos objetos
singleton1ysingleton2, 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 createdSolución del Ejercicio
- Clase Abstracta
Transport: Define un método abstractocreate_transport. - Clases Concretas
CaryBike: Implementan el métodocreate_transport. - Función
transport_factory: Crea instancias deCaroBikesegún el tipo de transporte proporcionado. - Uso del Factory Method: Se crean instancias de
CaryBikeutilizando 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
