Menu
Coddy logo textTech

Introducción a los patrones de diseño

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 89 de 110.

Patrones de diseño son soluciones probadas a problemas comunes que los desarrolladores encuentran repetidamente al crear software. En lugar de reinventar la rueda cada vez, puedes aplicar estas plantillas establecidas para resolver desafíos similares de una manera consistente y mantenible.

Piense en los patrones de diseño como si fueran recetas. Al igual que un chef no inventa una forma nueva de hacer pan cada vez, los programadores utilizan patrones que se han perfeccionado durante décadas. Estos patrones aprovechan los conceptos de OOP que ya ha aprendido —clases, herencia, interfaces y polimorfismo— y los combinan de maneras específicas para resolver problemas particulares.

Los patrones de diseño se agrupan típicamente en tres categorías:

CategoríaPropósitoEjemplos
CreacionalesCómo se crean los objetosSingleton, Factory
EstructuralesCómo se componen los objetosAdapter, Decorator
De comportamientoCómo se comunican los objetosObserver, Strategy

En las próximas lecciones, aprenderás patrones específicos de cada categoría. Cada patrón aborda un problema distinto: asegurar que solo exista una instancia de una clase, crear objetos sin especificar clases exactas o permitir que los objetos notifiquen a otros sobre cambios. Comprender cuándo y por qué usar cada patrón es tan importante como saber cómo implementarlo.

challenge icon

Desafío

Fácil

¡Vamos a construir un sistema simple de resolución de problemas que demuestre cómo los patrones de diseño organizan el código por categorías! Crearás una estructura que clasifica diferentes desafíos de software y sugiere qué tipo de patrón podría ayudar a resolverlos.

Organizarás tu código en dos archivos:

  • patterns.dart: Crea un enum llamado PatternCategory con tres valores: creational, structural, y behavioral. Cada uno debe tener un campo String description que explique su propósito:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    También crea una clase llamada Problem que represente un desafío de software. Debe tener un campo String name y un campo PatternCategory category. Incluye un método suggest() que devuelva una cadena con el formato: [name] -> Use a [category description] pattern
  • main.dart: Importa tu archivo de patrones y demuestra cómo diferentes problemas se mapean a diferentes categorías de patrones. Crea tres instancias de Problem:
    • Un problema llamado Ensure single database connection con la categoría creational
    • Un problema llamado Make old API work with new system con la categoría structural
    • Un problema llamado Notify users when data changes con la categoría behavioral
    Llama a suggest() en cada problema e imprime los resultados.

¡Este desafío te ayuda a ver cómo se categorizan los patrones de diseño según el tipo de problema que resuelven, un concepto clave a medida que comienzas a aprender patrones específicos en las próximas lecciones!

Salida esperada:

Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication pattern

Hoja de referencia

Los patrones de diseño son soluciones probadas a problemas comunes de programación. Son plantillas que combinan conceptos de POO (clases, herencia, interfaces, polimorfismo) de maneras específicas.

Los patrones de diseño se agrupan en tres categorías:

CategoríaPropósitoEjemplos
CreacionalesCómo se crean los objetosSingleton, Factory
EstructuralesCómo se componen los objetosAdapter, Decorator
De comportamientoCómo se comunican los objetosObserver, Strategy

Pruébalo tú mismo

import 'patterns.dart';

void main() {
  // TODO: Crea tres instancias de Problem:
  // 1. name: "Ensure single database connection", category: creational
  // 2. name: "Make old API work with new system", category: structural
  // 3. name: "Notify users when data changes", category: behavioral

  // TODO: Llama a suggest() en cada problema e imprime los resultados
}
quiz iconPonte a prueba

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