This thread, an implementation of a decorator template , has an implementation of a decorator using abstract classes. I don't like this for the simple fact that CondimentDecorator is NOT a drink in the implementation presented there. Instead, I would use interfaces. Isn't abstract classes better for is relations, and interfaces better for has relations?
public interface IBeverage
{
String Description { get; }
double Cost { get; }
}
public class HouseBlend : IBeverage
{
private string description;
public String Description
{
get { return description; }
}
private double cost;
public double Cost
{
get { return cost; }
}
public HouseBlend() { description = "House Blend"; cost = 0.89; }
}
public class DarkRoast : IBeverage
{
private string description;
public String Description
{
get { return description; }
}
private double cost;
public double Cost
{
get { return cost; }
}
public DarkRoast() { description = "Dark Roast"; cost = 1.10; }
}
public class Mocha
{
private IBeverage m_beverage;
private string description;
public String Description
{
get { return description; }
}
private public double Cost
{
get { return cost; }
}
public Mocha(IBeverage beverage)
{
m_beverage = beverage;
description = m_beverage.Description + ", Mocha";
cost = 0.20 + m_beverage.Cost;
}
}
Use like this:
Mocha mhb = new Mocha(new HouseBlend());
Scott source
share