Está en la página 1de 2

Patrón Decorator en C#:

Concepto.- El patrón Decorator se utiliza para agregar responsabilidades adicionales a un objeto dinámicamente, sin
modificar su estructura básica. Aquí tienes un ejemplo de cómo implementar el patrón Decorator en C#:

// Componente base
public interface ICafe{
string ObtenerDescripcion();
double ObtenerCosto();
}

// Clase concreta de componente base


public class CafeSimple : ICafe
{
public string ObtenerDescripcion()
{
return "Café simple";
}

public double ObtenerCosto()


{
return 2.0;
}
}

// Decorador base
public abstract class DecoradorCafe : ICafe
{
protected ICafe _cafeDecorado;

public DecoradorCafe(ICafe cafeDecorado)


{
_cafeDecorado = cafeDecorado;
}

public virtual string ObtenerDescripcion()


{
return _cafeDecorado.ObtenerDescripcion();
}

public virtual double ObtenerCosto()


{
return _cafeDecorado.ObtenerCosto();
}
}

// Decoradores concretos
public class LecheDecorator : DecoradorCafe
{
public LecheDecorator(ICafe cafeDecorado) : base(cafeDecorado)
{
}

public override string ObtenerDescripcion()


{
return _cafeDecorado.ObtenerDescripcion() + ", con leche";
}

public override double ObtenerCosto()


{
return _cafeDecorado.ObtenerCosto() + 0.5;
}
}

public class CarameloDecorator : DecoradorCafe


{
public CarameloDecorator(ICafe cafeDecorado) : base(cafeDecorado)
{
}

public override string ObtenerDescripcion()


{
return _cafeDecorado.ObtenerDescripcion() + ", con caramelo";
}

public override double ObtenerCosto()


{
return _cafeDecorado.ObtenerCosto() + 1.0;
}
}

Ejemplo en la Vida Real:

Un ejemplo del patrón Decorator en la vida real podría ser la personalización de un automóvil. Imagina que estás
comprando un automóvil y tienes opciones para agregar características adicionales, como asientos de cuero, un
sistema de sonido premium y un techo corredizo.

También podría gustarte