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.

PARENTESYS | 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
  
 929

Actualidad 3 dic 2024
El Cambio Esquilmático

 0
  
 1654

Actualidad 24 nov 2024
El mundo que viene en 2025

 0
  
 2410

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

 0
  
 11163

Pensamientos 30 ene 2024
Los problemas de la Inteligencia Artificial en el ARTE.

 0
  
 26959

Pensamientos 30 ene 2024
La importancia del silencio en el proceso creativo.

 0
  
 27647

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

 3
  
 238704

English Adverbios de Frecuencia

 10
  
 221880

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

 13
  
 184195

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

 16
  
 159666

English Something - Anything

 2
  
 150576

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

 2
  
 148692

Informática Mejores herramientas para Eventos Virtuales

 1
  
 118623

Actualidad Las profesiones que van a desaparecer.

 0
  
 105511

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

 0
  
 104739

Autores

Admin

Este autor tiene 31 artículos publicados.

PARENTESYS

Este autor tiene 23 artículos publicados.

MILES

Este autor tiene 3 artículos publicados.


Newsletter

Suscríbete a nuestros boletines