我对 OO 设计模式很陌生,对 Java 也比较陌生。
我的问题是关于 Head First Designer Patterns Starbuzz 示例中的装饰器示例。
我无法理解外部包装器如何调用内部包装器,特别是这些示例中的描述如何连接起来。
例如:
这是摩卡类(装饰):
public class Mocha extends CondimentsDecorator {
Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription()
{
return beverage.getDescription() + " , Mocha";
}
public double cost()
{
return .20 + beverage.cost();
}
}
这是饮料类(基础):
public abstract class Beverage {
String description = "Unknown Beverage";
public String getDescription()
{
return description;
}
public abstract double cost();
}
黑烤类:
public class DarkRoast extends Beverage {
public DarkRoast() {
description = "Dark Roast";
}
@Override
public double cost() {
return .99;
}
}
所以,如果我运行这个:
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
System.out.println(beverage2.getDescription() + " $" + beverage2.cost());
输出是:
Dark Roast , Mocha , Mocha $1.39
我不明白描述是如何构建的并将成本加在一起?描述和成本的状态如何保持?我在这里遗漏了一些明显的东西吗?