Decorator Pattern - lenoryv/Design-Patterns GitHub Wiki

Patrón Decorator en Kotlin

El patrón Decorator (también conocido como Wrapper) es otro patrón que se categoriza como patrón estructural y su intención:

Adjunte responsabilidades adicionales a un objeto de forma dinámica. Los decoradores proporcionan una alternativa flexible a las subclases para ampliar la funcionalidad.

Supongamos que tenemos una tienda que hace helados y ofrece coberturas servales como miel y nueces. La tienda tiene tres sabores: sabor a vainilla, sabor a fresa y sabor a chocolate.

Los clientes pueden solicitar muchas combinaciones (asumiendo que no se mezclan los sabores) como helado de vainilla con cobertura de miel, helado de chocolate con cobertura de miel y nueces, y más y más combinaciones. Si ampliamos la clase de helado para crear una clase concreta para cada combinación, eso nos llevará a la explosión de clases.

Una solución flexible a este problema es encerrar el helado en otro objeto que pueda agregar la cobertura. El objeto que lo encierra se llama decorador . El decorador agrega la cobertura y luego reenvía el pedido de helado al componente de helado, pero el decorador puede realizar sus acciones adicionales antes o después del reenvío. Luego, puede agregar otro decorador, otro aderezo, tanto como le guste al cliente. Por lo tanto, al hacer esto, asignamos responsabilidades adicionales al objeto de helado de manera dinámica, cuando el cliente solicita un topping, sin la necesidad de subclasificar el helado para cubrir todo tipo de helados y combinaciones de topping.

Entonces, si queremos tener un helado de vainilla con cobertura de miel y cobertura de nueces, podemos usar el decorador de cobertura de miel y el decorador de cobertura de nueces para lograrlo. Así que simplemente componemos los decoradores de cobertura con el helado de vainilla para producir los resultados deseados.

Las clases de decorador de topping de miel y decorador de topping de nueces son subclases de decorador de topping, que son una clase abstracta para que el helado lo decore, y el helado en sí es la clase abstracta para diferentes sabores de helado.

Estructura del patrón Decorator

Los participantes del patrón Decorador que se muestra en el diagrama anterior son:

Component (Ice Cream): Define la interfaz para los objetos cuyas responsabilidades se les pueden agregar de forma dinámica.

ConcreateComponent (Vanilla Ice cream, Strawberry Ice cream, Chocolate Ice cream): Define un objeto al que se pueden adjuntar responsabilidades adicionales.

Decorator (Topping decorator): El decorador mantiene una referencia a un objeto Componente y define una interfaz que se ajusta a la interfaz del Componente.

ConcreateDecorator (Honey topping decorator, Nuts topping decorator): Agregar responsabilidades al componente.

El decorador reenvía solicitudes a su objeto Componente y puede realizar operaciones adicionales antes y después de reenviar la solicitud.