私はデコレータパターンについてthis articleを読んだことがあります。Java:デコレータパターン - 主な抽象クラスへの参照
抽象クラスSandWichDecorator
からこのクラスinhertis:
public class CheeseDecorator extends SandWichDecorator{
Sandwich currentSandwich;
public CheeseDecorator(Sandwich sw){
currentSandwich = sw;
}
@Override
public String getDescription(){
return currentSandwich.getDescription() + ", Cheese";
}
@Override
public BigDecimal price() {
return currentSandwich.price().add(new BigDecimal("0.50"));
}
}
なぜabstract
クラスCheeseDecorator
クラスのSandwich
Sandwich currentSandwich;
への参照?
抽象クラスSandWichDecorator
に入れるのは簡単でしょうか? そして、すべてのクラスがSandWichDecorator
に拡張されると自動的に参照があります。
「サンドイッチ」は1語です。それは大文字のWを必要としません。 – khelwood
抽象クラス内でSandwich属性を宣言すると、すべてのサブクラスでこのパラメータを使用してコンストラクタを実装する必要があります。 –
そのWebサイトで与えられた例では、クラスSandWichDecoratorは有用なものを追加しません。私はなぜ作者がそれに悩まされているのか分かりません。チーズデコレーターでサンドイッチを直接拡張することもできます。 – DodgyCodeException