Patrones de diseño en programación: ¿Cuándo y cómo usarlos?