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:

int  erface 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
  
 6110

Informática 3 dic 2024
Json Web Token

 0
  
 6714

Informática 12 sep 2024
Patrón de diseño Adapter, en PHP

 0
  
 13478

Actualidad 25 feb 2024
La apología del pobrismo. La nueva moda Woke es Ser pobre.

 0
  
 36088

Informática 2 sep 2023
Instalación de supervisor en CentOS 8

 0
  
 22336

Informática 31 ago 2023
Instalación de RabbitMQ en CentOS 8

 0
  
 22484

Crea tu Periódico Digital
Los + recientes
Los + populares
El Arte del Bonsái Ficus - Variedades

 3
  
 243931

English Adverbios de Frecuencia

 10
  
 226988

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

 13
  
 189334

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

 16
  
 164874

English Something - Anything

 2
  
 155667

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

 2
  
 154134

Informática Mejores herramientas para Eventos Virtuales

 1
  
 123747

Actualidad Las profesiones que van a desaparecer.

 0
  
 110746

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

 0
  
 109859

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