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 Java de Coddy — lección 64 de 87.

Los 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 probadas en el tiempo para resolver desafíos de diseño recurrentes.

Piense en los patrones de diseño como planos. No le proporcionan código terminado para copiar y pegar, sino que describen cómo estructurar sus clases y objetos para resolver un tipo específico de problema. Los patrones que aprenderá aprovechan los conceptos de POO que ya domina: herencia, interfaces, polimorfismo y composición.

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

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

¿Por qué aprender patrones de diseño? Te proporcionan un vocabulario compartido con otros desarrolladores; decir "use a Factory here" comunica instantáneamente una idea compleja. También te ayudan a escribir código más flexible y mantenible al aplicar principios como "program to an interface, not an implementation".

En las próximas lecciones, implementarás varios patrones esenciales, comenzando con patrones de creación como Singleton y Factory, luego pasando a patrones de comportamiento como Observer y Strategy.

challenge icon

Desafío

Fácil

¡Vamos a construir un clasificador de patrones sencillo que demuestre tu comprensión de las tres categorías de patrones de diseño! Crearás un sistema que categoriza los patrones y explica su propósito, organizando tu código en múltiples archivos.

Crearás tres archivos:

  • Pattern.java: Crea una interfaz llamada Pattern que defina el contrato para todos los patrones de diseño. Tu interfaz debe declarar dos métodos: String getCategory() que devuelve la categoría del patrón (Creational, Structural, o Behavioral), y String getPurpose() que devuelve una descripción de lo que hace esa categoría de patrones.
  • PatternInfo.java: Crea tres clases que implementen tu interfaz Pattern, cada una representando una categoría de patrones de diseño:

    CreationalPattern - debe devolver "Creational" para la categoría y "How objects are created" para el propósito.

    StructuralPattern - debe devolver "Structural" para la categoría y "How objects are composed" para el propósito.

    BehavioralPattern - debe devolver "Behavioral" para la categoría y "How objects communicate" para el propósito.

  • Main.java: ¡Une tu clasificador de patrones! Recibirás una entrada: un nombre de patrón (String) que será uno de los siguientes: "Singleton", "Factory", "Adapter", "Decorator", "Observer", o "Strategy".

    Basándote en la entrada, crea el objeto de patrón apropiado:

    • "Singleton" y "Factory" son patrones Creational
    • "Adapter" y "Decorator" son patrones Structural
    • "Observer" y "Strategy" son patrones Behavioral

    Almacena tu objeto de patrón en una variable de tipo Pattern (la interfaz), demostrando el principio de programar hacia una interfaz. Luego imprime las siguientes tres líneas:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

Recibirás una entrada: el nombre de un patrón de diseño (String).

Este desafío refuerza la idea clave de la lección: los patrones de diseño se organizan en categorías según el problema que resuelven. Al usar una interfaz, también estás practicando el principio de "programar hacia una interfaz, no hacia una implementación", ¡un concepto central que hace que los patrones de diseño sean tan potentes!

Hoja de referencia

Los patrones de diseño son soluciones probadas a problemas comunes en el desarrollo de software. Son planos que describen cómo estructurar clases y objetos para resolver tipos específicos de problemas.

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

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

Los patrones de diseño proporcionan un vocabulario compartido entre los desarrolladores y ayudan a escribir código más flexible y mantenible al aplicar principios como "programar para una interfaz, no para una implementación".

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: Declarar una variable de tipo Pattern (la interfaz)
        Pattern pattern = null;
        
        // TODO: Basado en patternName, crea el objeto de patrón apropiado:
        // - "Singleton" y "Factory" son patrones Creational
        // - "Adapter" y "Decorator" son patrones Structural
        // - "Observer" y "Strategy" son patrones Behavioral
        
        // TODO: Imprime la salida en el siguiente formato:
        // Pattern: [input pattern name]
        // Category: [category de getCategory()]
        // Purpose: [purpose de getPurpose()]
    }
}
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