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 C# de Coddy — lección 51 de 70.

Los patrones de diseño son soluciones probadas a problemas comunes que los desarrolladores encuentran repetidamente al construir software. En lugar de reinventar la rueda cada vez, los patrones nos brindan un vocabulario compartido y enfoques probados para estructurar el código.

Piense en los patrones de diseño como planos. No le proporcionan código exacto para copiar, sino que describen cómo organizar clases y objetos para resolver desafíos específicos. Cuando alguien menciona "use el patrón Factory aquí", los desarrolladores experimentados comprenden de inmediato la estructura general que se propone.

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

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

Los patrones que exploraremos se basan directamente en los conceptos de OOP que ya has aprendido: interfaces, herencia, polimorfismo y composición. Cada patrón aprovecha estos fundamentos de maneras específicas para lograr flexibilidad, mantenibilidad o reutilización.

En las próximas lecciones, implementarás varios patrones esenciales comenzando con Singleton, Factory, Observer y Strategy. Comprender estos patrones te ayudará a reconocer soluciones comunes en bases de código existentes y a tomar mejores decisiones arquitectónicas en tus propios proyectos.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de catálogo de patrones sencillo que organice la información de los patrones de diseño en varios archivos. Esto te ayudará a entender cómo se categorizan los patrones mientras practicas una buena organización del código.

Crearás tres archivos para separar las diferentes responsabilidades:

  • Pattern.cs: Define una clase Pattern en el espacio de nombres Patterns que represente un único patrón de diseño. Cada patrón debe tener un Name, Category (Creational, Structural, o Behavioral) y una Description. Incluye un método GetSummary() que devuelva una cadena con formato: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Crea una clase PatternCatalog en el espacio de nombres Patterns que gestione una colección de patrones. Tu catálogo debe ser capaz de añadir patrones y tener un método GetPatternsByCategory(string category) que devuelva una lista de todos los patrones que coincidan con esa categoría. También incluye un método GetAllSummaries() que devuelva una lista de cadenas de resumen para todos los patrones del catálogo.
  • Program.cs: Une todo creando un catálogo y poblándolo con patrones basados en la entrada. Luego, muestra los patrones filtrados por categoría.

Recibirás las siguientes entradas:

  • Número de patrones a añadir
  • Para cada patrón: tres líneas que contienen el nombre, la categoría y la descripción
  • Una categoría para filtrar

Después de añadir todos los patrones a tu catálogo, imprime los resúmenes de los patrones que coincidan con la categoría del filtro, uno por línea. Si no hay patrones que coincidan, imprime No patterns found.

Por ejemplo, si las entradas son:

3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
Creational

La salida debería ser:

[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact class

Este desafío demuestra cómo la organización de clases relacionadas en archivos separados mantiene tu base de código limpia y mantenible, ¡un principio que se vuelve aún más importante a medida que implementas patrones de diseño reales en las próximas lecciones!

Hoja de referencia

Los patrones de diseño son soluciones probadas para problemas comunes en el desarrollo de software. Proporcionan planos para organizar clases y objetos en lugar de código exacto para copiar.

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

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

Los patrones de diseño se basan en conceptos de OOP como interfaces, herencia, polimorfismo y composición para lograr flexibilidad, mantenibilidad y reutilización.

Pruébalo tú mismo

using System;
using System.Collections.Generic;
using Patterns;

class Program
{
    public static void Main(string[] args)
    {
        // Lee el número de patrones
        int n = Convert.ToInt32(Console.ReadLine());
        
        // Crea un nuevo PatternCatalog
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: Lee los detalles de cada patrón (name, category, description)
        // y añádelos al catálogo
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: Crea un Pattern y añádelo al catálogo
        }
        
        // Lee la categoría por la cual filtrar
        string filterCategory = Console.ReadLine();
        
        // TODO: Obtén los patrones por la categoría de filtro
        // e imprime sus resúmenes
        // Si no coinciden patrones, imprime "No patterns found"
    }
}
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