【发布时间】:2016-12-04 16:10:21
【问题描述】:
我正在研究头部优先设计模式,但我正在用 C# 而不是 java 编写示例。我编写了装饰器模式,但我遇到了一些奇怪的错误,我无法弄清楚如何修复。 第 1 行按预期运行,描述为“Dark Roast”,但第 2 行将描述更改为“未知饮料”,而不是预期的“Dark Roast,摩卡”。如何解决此问题?
主程序:
beverage = new DarkRoast();
beverage = new Mocha(beverage);
beverage = new Mocha(beverage);
Console.WriteLine(beverage.Description + " $" + beverage.Cost);
装饰器代码:
namespace DecoratorPattern
{
public abstract class Beverage
{
public abstract double Cost { get; }
public string Description { get; set; } = "unknown beverage";
}
public class DarkRoast : Beverage
{
public DarkRoast()
{
Description = "Dark Roast";
}
public override double Cost => .99;
}
public abstract class CondimentDecorator : Beverage
{
public abstract string Description { get; }
}
public class Mocha : CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public override string Description
{
get { return beverage.Description + ", Mocha"; }
}
public override double Cost => .20 + beverage.Cost;
}
}
【问题讨论】:
-
主程序无法编译。
标签: c# inheritance decorator