
500
12
章
カモデコレータ
public class QuackCounter implements Quackable {
Quackable duck;
static int numberOfQuacks;
public QuackCounter (Quackable duck) {
this.duck = duck;
}
public void quack() {
duck.quack();
numberOfQuacks++;
}
public static int getQuacks() {
return numberOfQuacks;
}
}
8
カモの鳴き声学者のために鳴き声の数を示します。
どのようにするのでしょうか?
カモをデコレータオブジェクトでラップしてカ
モに新しい振る舞い(集計する振る舞い)を追加するデコレータを作成しましょ
う。
Duck
コードは全く変更する必要はありません。
アダプタと同様に、ターゲットイ
ンタフェースを実装する必要があ
ります。
インスタンス変数を使って、装
飾する
Quackable
クラスを格
納します。
Quackable
クラスの総数を数
えるため、スタティック変数を
使って管理します。
コンストラクタでは、装飾する
Quackable
への参照を取得し
ます。
quack()
が呼び出されると、装飾する
Quackable
にその呼び出しを委譲します。
そして、鳴き声の数を増やします。
デコレータには他に
1
つのメソッドを追加
しています。このスタティックメソッド
は、単にすべての