2

私は OO デザイン パターンにまったく慣れておらず、Java には比較的慣れていません。

私の質問は、Head First Designer Patterns Starbuzz の例の Decorator の例についてです。

外側のラッパーが内側のラッパーを呼び出す方法、具体的にはこれらの例の説明がどのように連結されるかを理解するのに苦労しています。

例えば:

モカクラス(装飾)は次のとおりです。

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();
}

}

Beverage クラス (ベース) は次のとおりです。

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

説明がどのように構築され、コストが一緒に加算されるのか理解できませんか? 説明とコストの状態はどのように維持されますか? ここで明らかな何かが欠けていますか?

4

2 に答える 2

1

説明は

public String getDescription() 
{
    return beverage.getDescription() + " , Mocha";
}

の説明は、クラスMochaの説明を呼び出​​すことに注意してください。Beverage

コストは次のように計算されます。

public double cost()
{
    return .20 +  beverage.cost();
}

したがって、クラスのコストは、その計算の一部としてクラスMochaのコストを呼び出します。Beverage

于 2013-03-31T01:32:21.720 に答える