Introducción a los patrones de diseño
Parte de la sección Programación orientada a objetos del Journey de Python de Coddy. Lección 44 de 64.
Los patrones de diseño son soluciones reutilizables para problemas comunes del diseño de software. Son como planos que puedes personalizar para resolver problemas de diseño recurrentes en tu código.
Piensa en los patrones de diseño como plantillas probadas que los desarrolladores con experiencia utilizan para resolver problemas similares. Cuando dices «utilicé el patrón Singleton», los demás desarrolladores comprenden inmediatamente la estructura de tu código.
Aquí tienes un ejemplo sencillo de por qué los patrones son importantes:
# Without pattern - messy approach
class DatabaseConnection:
def __init__(self):
self.connection = "Connected to database"
# Problem: Multiple connections created
db1 = DatabaseConnection()
db2 = DatabaseConnection() # Wasteful - creates another connectionCon un patrón de diseño, obtienes una mejor solución:
# With Singleton pattern - controlled approach
class DatabaseConnection:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.connection = "Connected to database"
return cls._instance
# Now only one connection exists
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # True - same instancePor qué usar patrones de diseño:
- Reutilización: Soluciones que puedes aplicar a problemas similares
- Comunicación: Vocabulario común entre desarrolladores
- Buenas prácticas: Soluciones comprobadas a lo largo del tiempo
- Mantenibilidad: Código bien estructurado y organizado
Lo que aprenderás en esta serie:
Patrones creacionales (cómo se crean los objetos):
- Patrón Singleton: una única instancia
- Patrón Factory: crear objetos sin especificar la clase exacta
Patrones estructurales (cómo se componen los objetos):
- Patrón Adaptador - Hacer que las interfaces incompatibles funcionen juntas
- Patrón Decorador - Añadir funcionalidad sin cambiar la estructura
Patrones de comportamiento (cómo interactúan los objetos):
- Patrón Observer: notificar a varios objetos sobre los cambios
- Patrón Strategy: cambiar algoritmos dinámicamente
- Patrón Command: encapsular solicitudes como objetos
Cada lección sobre patrones cubrirá:
- Qué problema resuelve
- Cómo implementarlo en Python
- Cuándo usarlo
- Ejemplos del mundo real
Punto clave: los patrones de diseño son soluciones probadas para problemas comunes de programación. Proporcionan un vocabulario compartido y buenas prácticas que hacen que tu código sea más fácil de mantener, flexible y sencillo de entender. Aprenderás 7 patrones esenciales que todo desarrollador de Python debería conocer.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - Jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso - Lista personalizada10Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancariasPractica por tu cuenta: Compilador de Python online