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 PHP de Coddy — lección 70 de 91.

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 establecidas para resolver desafíos similares en tu propio código.

Piense en los patrones de diseño como recetas. Al igual que un chef sigue una receta para crear un plato que se ha perfeccionado con el tiempo, los desarrolladores utilizan patrones de diseño para estructurar su código de maneras que han sido probadas y refinadas por innumerables programadores antes que ellos.

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

Categoría Propósito Ejemplos
Creacional Cómo se crean los objetos Singleton, Factory
Estructural Cómo se componen los objetos Adapter, Decorator
De comportamiento Cómo se comunican los objetos Observer, Strategy

De hecho, has estado utilizando patrones a lo largo de este curso sin darte cuenta. Cuando creaste clases abstractas con métodos que las clases hijas deben implementar, estabas aplicando una forma del patrón Template Method. Cuando utilizaste interfaces para definir contratos, te estabas preparando para el patrón Strategy.

Aprender patrones de diseño te brinda un vocabulario compartido con otros desarrolladores. En lugar de explicar una estructura compleja en detalle, simplemente puedes decir "Usé el patrón Factory aquí" y los desarrolladores experimentados entenderán inmediatamente tu enfoque. En las siguientes lecciones, implementaremos varios patrones esenciales en PHP.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de formateo de mensajes sencillo que demuestre cómo los patrones de diseño ayudan a organizar el código. Identificarás a qué categoría de patrón pertenece cada componente y verás cómo trabajan juntas las diferentes partes de un sistema.

Organizarás tu código en tres archivos:

  • MessageFormatter.php — Crea una interfaz llamada MessageFormatter que defina un contrato para formatear mensajes. Debe tener un único método format(string $message): string. Esto representa la categoría behavioral (de comportamiento): define cómo se comunican los objetos y cómo procesan los datos.
  • Formatters.php — Incluye el archivo MessageFormatter y crea dos clases que implementen la interfaz:
    • UppercaseFormatter — Su método format() devuelve el mensaje convertido a mayúsculas.
    • BracketFormatter — Su método format() envuelve el mensaje entre corchetes como [message].
  • main.php — Incluye el archivo Formatters. Recibirás dos entradas: una cadena de mensaje y un tipo de formateador ("upper" o "bracket").

    Crea una función llamada processMessage que acepte un MessageFormatter y una cadena de mensaje, y luego devuelva el resultado formateado. Esta función no necesita saber qué formateador específico recibe; simplemente llama a format() en cualquier objeto que se le pase.

    Basándote en la entrada del tipo de formateador, crea el objeto formateador apropiado. Pásalo a tu función processMessage junto con el mensaje e imprime el resultado.

    En una nueva línea, imprime qué categoría de patrón representa esta estructura. Dado que estamos definiendo comportamientos intercambiables a través de una interfaz, imprime: Pattern category: Behavioral

Este desafío muestra cómo las interfaces te permiten intercambiar implementaciones sin cambiar el código que las utiliza, una base para patrones como Strategy que explorarás en las próximas lecciones.

Hoja de referencia

Los patrones de diseño son soluciones probadas a problemas comunes de programación que proporcionan plantillas para estructurar el código de manera efectiva.

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

Categoría Propósito Ejemplos
Creacionales Cómo se crean los objetos Singleton, Factory
Estructurales Cómo se componen los objetos Adapter, Decorator
De comportamiento Cómo se comunican los objetos Observer, Strategy

Los patrones de diseño proporcionan un vocabulario compartido entre los desarrolladores, lo que facilita la comunicación de decisiones arquitectónicas complejas.

Pruébalo tú mismo

<?php
require_once 'Formatters.php';

// Leer entrada
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Crear una función llamada processMessage que acepte un MessageFormatter
// y una cadena de mensaje, luego devuelva el resultado formateado


// TODO: Basado en $formatterType ("upper" o "bracket"), crear el formateador apropiado


// TODO: Llamar a processMessage con el formateador y el mensaje, luego imprimir el resultado


// TODO: Imprimir la categoría del patrón en una nueva línea
// Formato: "Pattern category: Behavioral"

?>
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