El patrón decorador es un patrón de diseño estructural que permite añadir nuevas funcionalidades a un objeto de manera dinámica, sin alterar su estructura. Este patrón es especialmente útil cuando queremos extender el comportamiento de clases existentes de forma flexible y reutilizable. En este artículo, exploraremos cómo implementar el patrón decorador en Ruby, proporcionando ejemplos claros y explicaciones detalladas.
El patrón decorador permite a los desarrolladores agregar responsabilidades adicionales a los objetos de forma dinámica. A diferencia de la herencia, que es estática y puede llevar a una jerarquía de clases complicada, el patrón decorador permite una mayor flexibilidad al permitir que los objetos se decoren en tiempo de ejecución.
Para implementar el patrón decorador, necesitamos tres componentes principales:
Veamos un ejemplo práctico para entender mejor cómo funciona el patrón decorador en Ruby. Imaginemos que estamos construyendo un sistema de café donde podemos tener diferentes tipos de bebidas y queremos agregarles diferentes ingredientes como leche, azúcar, etc.
Primero, definimos la interfaz del componente:
class Bebida def descripcion raise NotImplementedError, 'Este método debe ser implementado en la subclase' end def costo raise NotImplementedError, 'Este método debe ser implementado en la subclase' end end
A continuación, implementamos una bebida concreta, como el café:
class Cafe < Bebida def descripcion 'Café' end def costo 5.0 end end
Ahora, creamos un decorador que puede agregar ingredientes a la bebida:
class DecoradorBebida < Bebida def initialize(bebida) @bebida = bebida end end
Ahora, implementamos decoradores concretos para agregar ingredientes como leche y azúcar:
class Leche < DecoradorBebida def descripcion "#{@bebida.descripcion}, con leche" end def costo @bebida.costo + 1.5 end end class Azucar < DecoradorBebida def descripcion "#{@bebida.descripcion}, con azúcar" end def costo @bebida.costo + 0.5 end end
Ahora que hemos definido nuestras clases, veamos cómo podemos usarlas para crear una bebida personalizada:
# Creamos un café mi_cafe = Cafe.new puts "#{mi_cafe.descripcion} cuesta #{mi_cafe.costo}€" # Agregamos leche mi_cafe_con_leche = Leche.new(mi_cafe) puts "#{mi_cafe_con_leche.descripcion} cuesta #{mi_cafe_con_leche.costo}€" # Agregamos azúcar mi_cafe_con_leche_y_azucar = Azucar.new(mi_cafe_con_leche) puts "#{mi_cafe_con_leche_y_azucar.descripcion} cuesta #{mi_cafe_con_leche_y_azucar.costo}€"
La salida del código anterior será:
Café cuesta 5.0€ Café, con leche cuesta 6.5€ Café, con leche, con azúcar cuesta 7.0€
El patrón decorador es una herramienta poderosa en Ruby que permite a los desarrolladores agregar funcionalidades a los objetos de manera flexible y dinámica. A través de la implementación de este patrón, hemos visto cómo se pueden crear decoradores que extienden el comportamiento de las clases existentes sin necesidad de modificar su código original.
Este enfoque no solo promueve la reutilización del código, sino que también ayuda a mantener un diseño limpio y organizado. Al utilizar el patrón decorador, puedes construir sistemas más complejos y adaptables, lo que es especialmente valioso en aplicaciones de gran escala.
Esperamos que este artículo te haya proporcionado una comprensión clara del patrón decorador y cómo implementarlo en Ruby. ¡Feliz codificación!
© 2024 RailsInsights. All rights reserved.