
public abstract class CondimentDecorator extends Beverage {
Beverage beverage;
public abstract String getDescription();
}
public abstract class Beverage {
String description = "
不明な飲み物
";
public String getDescription() {
return description;
}
public abstract double cost();
}
スターバズのコードを書く
ここでは、設計から実際のコードに変換していきます。
まず
Beverage
クラスから始めましょう。このクラスはスターバズの
元の設計から変更する必要がありません。確認しましょう。
Beverage
はとても簡単です。コンディメント(デコレータ)用の抽象クラスも実
装しましょう。
Beverage
は、
getDescription()
と
cost()
という
2
つのメソッドを
持つ抽象クラスです。
getDescription
はすでに実
装済みですが、
cost()
はサブ
クラスで実装する必要があり
ます。
まず
Beverage
と交換可能にする
必要があるため、
Beverage
クラス
を拡張します。
すべてのコンディメントデコレー
タは
getDescription()
メソッドを
実装し直す必要もあります。この理
由についてもすぐ後で説明します。
各デコレータがラップする
Beverage ...