Decorador
El patrón Decorador (Decorator) es un patrón de diseño estructural que permite añadir dinámicamente funcionalidades a objetos en tiempo de ejecución sin alterar la estructura de las clases existentes. Se utiliza para extender las funcionalidades de los objetos de una manera flexible y reutilizable, implementando cada funcionalidad en clases decoradoras separadas.
Concepto del Patrón Decorador
Imagina que tienes una clase base, por ejemplo, una bebida, y quieres añadir opciones como leche, azúcar, chocolate, etc., sin modificar la clase base ni crear subclases para cada combinación posible. El patrón decorador permite esto añadiendo estas funcionalidades en tiempo de ejecución.
Ejemplo en TypeScript
Vamos a crear un ejemplo simple que demuestra cómo funciona el patrón decorador. En este ejemplo, consideraremos una aplicación que simula una cafetería con diferentes tipos de café y opciones adicionales como leche y azúcar.
Explicación
SimpleCoffee es la implementación básica de la interfaz Coffee.
CoffeeDecorator es una clase abstracta que implementa la interfaz Coffee y mantiene una referencia a un objeto Coffee. Todos los decoradores concretos extenderán esta clase.
WithMilk y WithSugar son decoradores concretos que añaden funcionalidades y costos adicionales al objeto Coffee.
Al final, demostramos cómo se puede envolver un café simple con múltiples decoradores para agregar leche y azúcar, mostrando cómo el patrón Decorador permite añadir dinámicamente funcionalidades.
Este patrón es muy útil para respetar el principio de responsabilidad única y el principio de abierto/cerrado, permitiendo que las clases estén abiertas para la extensión pero cerradas para la modificación.
Last updated