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 comprobadas para 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.

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

Los patrones de diseño suelen agruparse 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

En realidad, 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, estabas preparando el terreno para el patrón Strategy.

Aprender patrones de diseño te proporciona 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

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

Organizarás tu código en tres archivos:

  • MessageFormatter.php: Crea una interfaz llamada MessageFormatter que defina un contrato para dar formato a los mensajes. Debe tener un único método format(string $message): string. Esto representa la categoría de comportamiento. Define cómo se comunican los objetos y 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 que después 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.

    Según la entrada del tipo de formateador, crea el objeto de formateador adecuado. Pásalo a tu función processMessage junto con el mensaje e imprime el resultado.

    En una línea nueva, imprime qué categoría de patrón representa esta estructura. Como estamos definiendo comportamientos intercambiables mediante 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.

Pruébalo tú mismo

<?php
require_once 'Formatters.php';

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

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


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


// TODO: Llama a processMessage con el formateador y el mensaje, luego imprime el resultado


// TODO: Print the pattern category on a new line
// Format: "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

Practica por tu cuenta: Compilador de PHP online