
以下は作り直したクラス構造全体です。いろいろなカモが
Duck
クラスを拡張
し、飛ぶ振る舞いが
FlyBehavior
を実装し、鳴く振る舞いが
QuackBehavior
を実装
するなど、必要なものはすべて揃っています。
物事を少し異なった方法で表していることにも注目しましょう。ここではカモ
の振る舞いを一連の振る舞いと考えるのではなく、一連のアルゴリズムと考えて
います。
SimUDuck
の設計では、アルゴリズムとはカモの実行すること(さまざ
まな方法で鳴いたり飛んだりすること)を表しています。ですが、州ごとの州売
上税を計算する方法を実装するクラス群にも同じテクニックを簡単に使うことが
できます。
クラス間の関係に注目してください。実際にペンを握って、
IS-A
(〜である)、
HAS-A
(〜を持つ)、
IMPLEMENTS
(実装する)といった適切な関係をクラス
図の矢印に書き込んでみましょう。
カプセル化された振る舞いの全体像
これまでカモシミュレータの設計を細かく検討してきたので、ここでは視野を広
げて全体像を見てみましょう。
swim()
display
()
performQuack()
performFly()
setFlyBehavior()
setQuackBehavior()
//
カモに関する他のメソッド
Duck
FlyBehavior flyBehavior
QuackBehavior quackBe
havior
<<interface>>
FlyBehavior
fly()
fly() {
//
カモの飛行を実装