Se intentó implementar el patrón de decorador en C# a partir del código del libro "Modelos de diseño de Head First" (escrito en Java).Implementación del patrón de decorador
Estoy empezando con C# y, por lo tanto, soy nuevo en la sintaxis, por lo que no estoy seguro de por qué no puedo hacer funcionar la línea de código comentada a continuación.
Aquí es la primera clase abstracta-base y sus clases derivadas en el patrón Decorator:
using System;
public abstract class Beverage
{
private String m_description;
// get a description of the beverage
public virtual String Description { get { return m_description; } }
// calculate cost of the beverage
public abstract double Cost();
}
// HouseBlend coffee implements Beverage
public class HouseBlend : Beverage
{
// Constructor
public HouseBlend() { m_description = "House Blend"; }
// calculate base cost of House Blend
public override double Cost() { return 0.89; }
}
// DarkRoast coffee implements Beverage
public class DarkRoast : Beverage
{
// Constructor
public DarkRoast() { m_description = "Dark Roast"; }
// calculate base cost of Dark Roast
public override double Cost() { return 1.00; }
}
// Espresso coffee implements Beverage
public class Espresso : Beverage
{
// Constructor
public Espresso() { m_description = "Espresso"; }
// calculate base cost of Espresso
public override double Cost() { return 1.99; }
}
El código erróneo es en el método de costo() de la clase Mocha:
using System;
// abstract base class CondimentDecorator is-a Beverage
public abstract class CondimentDecorator : Beverage {}
// Mocha implements the CondimentDecorater
public class Mocha : CondimentDecorator
{
// Condiment decorator has-a Beverage (recursion!)
private Beverage m_beverage;
// Constructor binds the object passed to member var
public Mocha(Beverage beverage)
{
this.m_beverage = beverage;
}
// getter implements abstract class Description
public override String Description
{
get
{
return m_beverage.Description + ", Mocha";
}
}
// get the Cost of the condiment plus the base-cost
// of the original beverage
public new double Cost() // ERROR: 'Mocha.Cost()' hides inherited
{ // member 'Beverage.Cost()'
return 0.20 + m_beverage.Cost();
}
}
FYI aunque el libro utiliza Java del [página web del libro] (http://headfirstlabs.com/books/hfdp/) enlaces a [código de ejemplo en C#] (http://www.msquaredweb.com/ DesignPatterns/HeadFirstDesignPatternsInCSharp.zip) y C++. –
Bueno saber. Lo comprobaré – dtg