Patrón de diseño Decorator, en PHP
parentesys

Patrón de diseño Decorator, en PHP

El patrón de diseño Decorator es un patrón estructural que permite agregar nuevas funcionalidades a un objeto de manera dinámica sin alterar su estructura original.

OSCAR H CABALLERO | 11 dic 2024

Qué es el Patrón de Diseño Decorator

El patrón de diseño Decorator es un patrón estructural que permite agregar nuevas funcionalidades a un objeto de manera dinámica sin alterar su estructura original. Este patrón utiliza una composición en lugar de herencia, permitiendo añadir responsabilidades adicionales a un objeto en tiempo de ejecución al envolverlo dentro de clases decoradoras.

En esencia, el patrón Decorator delega la funcionalidad al objeto original y, al mismo tiempo, añade sus propias capacidades. Este enfoque es útil cuando necesitamos extender el comportamiento de ciertas clases sin modificar su código base.

Casos de uso del Patrón Decorator

El patrón Decorator es especialmente útil en los siguientes escenarios:

  1. Extender funcionalidades sin modificar la clase original o afectar a otras instancias de la misma clase.

  2. Sustituir la herencia en situaciones donde agregar nuevas funcionalidades mediante subclases podría generar una jerarquía de clases muy compleja.

  3. Agregar comportamientos dinámicos que pueden ser aplicados de forma selectiva y en tiempo de ejecución.

  4. Cuando se trabaja con frameworks o librerías en las que no es posible modificar el código fuente de las clases existentes.

Un ejemplo común de uso es en sistemas de interfaz de usuario (UI), donde se pueden agregar bordes, sombreados o rellenos a componentes visuales sin alterar sus clases base.


Ventajas del Patrón Decorator

  1. Flexibilidad: Permite combinar comportamientos de forma modular, evitando las limitaciones de una jerarquía de herencia fija.

  2. Abierto para extensión, cerrado para modificación: Siguiendo el principio de diseño SOLID, este patrón evita modificar la clase original para agregar nuevas funcionalidades.

  3. Reutilización: Los decoradores pueden ser reutilizados de manera independiente para agregar funcionalidades a distintos objetos.

  4. Simplicidad: Se pueden añadir o quitar funcionalidades sin necesidad de alterar código existente.

Ejemplo de código en PHP

A continuación, se presenta un ejemplo del patrón Decorator implementado en PHP:

Componente
{
    public function operacion(): string;
}

// Clase concreta que implementa la interfaz base
class ComponenteConcreto implements Componente
{
    public function operacion(): string
    {
        return "Componente base";
    }
}

// Clase base para los decoradores
class DecoradorBase implements Componente
{
    protected Componente $componente;

    public function __construct(Componente $componente)
    {
        $this->componente = $componente;
    }

    public function operacion(): string
    {
        return $this->componente->operacion();
    }
}

// Decorador concreto que agrega funcionalidad
class DecoradorA extends DecoradorBase
{
    public function operacion(): string
    {
        return parent::operacion() . " + Funcionalidad A";
    }
}

// Otro decorador concreto
class DecoradorB extends DecoradorBase
{
    public function operacion(): string
    {
        return parent::operacion() . " + Funcionalidad B";
    }
}


// Uso del patrón Decorator
$componente = new ComponenteConcreto();

// Envolvemos el componente con DecoradorA
$decoradoA = new DecoradorA($componente);

// Envolvemos el resultado con DecoradorB
$decoradoB = new DecoradorB($decoradoA);

// Ejecutamos la operación
echo $decoradoB->operacion(); // Resultado: "Componente base + Funcionalidad A + Funcionalidad B"

En este ejemplo, la clase ComponenteConcreto representa el objeto base al que se le pueden agregar nuevas funcionalidades mediante los decoradores DecoradorA y DecoradorB. Los decoradores heredan de DecoradorBase, que implementa la interfaz Componente.

El resultado es un sistema modular y extensible en el que se pueden combinar los decoradores según sea necesario.


Conclusión

El patrón Decorator es una herramienta poderosa para diseñar sistemas de software flexibles y escalables. Su capacidad de agregar funcionalidades de manera dinámica y selectiva lo convierte en una opción ideal para proyectos en los que la extensibilidad y la modularidad son esenciales.

Si quieres ver más ejemplos del Patrón de Diseño Decorator (o de otros patrones) en PHP, puedes consultar este repositorio:

https://github.com/oscarhcaballero/php-patterns-examples

Invítame a un café si te ha gustado este artículo
2,20 EUR

Temas relacionados:

patrones de diseño

decorator

patrón estructural

php

Opiniones de este contenido

Esta web se reserva el derecho de suprimir, por cualquier razón y sin previo aviso, cualquier contenido generado en los espacios de participación en caso de que los mensajes incluyan insultos, mensajes racistas, sexistas... Tampoco se permitirán los ataques personales ni los comentarios que insistan en boicotear la labor informativa de la web, ni todos aquellos mensajes no relacionados con la noticia que se esté comentando. De no respetarse estas mínimas normas de participación este medio se verá obligado a prescindir de este foro, lamentándolo sinceramente por todos cuantos intervienen y hacen en todo momento un uso absolutamente cívico y respetuoso de la libertad de expresión.




 No hay opiniones. Sé el primero en escribir.


Tu opinión

Informática 11 dic 2024
Patrón de diseño Decorator, en PHP

 0
  
 3465

Informática 3 dic 2024
Json Web Token

 0
  
 4052

Informática 9 ago 2024
Makefile, el archivo que te ayuda a ser más productivo.

 0
  
 13680

Crea tu Periódico Digital
El Arte del Bonsái Ficus - Variedades

 3
  
 241261

English Adverbios de Frecuencia

 10
  
 224370

Informática Generador de códigos de barras en PHP

 13
  
 186702

Quejas denuncias estafas Descubre quién te visita en Facebook?

 16
  
 162203

English Something - Anything

 2
  
 153069

Marketing digital Cómo ganar dinero con un periódico o revista digital

 2
  
 151353

Informática Mejores herramientas para Eventos Virtuales

 1
  
 121129

Actualidad Las profesiones que van a desaparecer.

 0
  
 108092

Informática Periodista digital, ¿cuánto vale tu tiempo?

 0
  
 107243

Autores

OSCAR H CABALLERO

Este autor tiene 40 artículos publicados.

PARENTESYS

Este autor tiene 11 artículos publicados.

MILES

Este autor tiene 5 artículos publicados.


Newsletter

Suscríbete a nuestros boletines