
display()
fly()
quack()
RedheadDuck
display()
quack()
RubberDuck
swim()
display
()
//
カモに関する他のメソッド
Duck
display()
DecoyDuck
quack()
Quackable
インタフェースはどうか?
ジョーは、経営幹部がこの製品を
6
ヶ月ごとに更新し
たがっている(更新方法は未定)というメモを受け取っ
たので、継承は解決策ではないだろうと気付きました。
ジョーは、仕様が変化し続け、プログラムに新しい
Duck
サブクラスを追加するたびに
fly()
と
quack()
を調べ、おそ
らくはオーバーライドしなければいけなくなることを理
解しました。しかも、この作業は永久に続くのです。
そのため、ジョーにはカモの型の(すべてではなく)
一部だけが飛んだり鳴き声をあげたりするためのよりわ
かりやすい方法が必要です。
この設計をどう思いますか?
Duck
スー パークラスか
ら
fly()
を取り除き、
fly()
メソッドを
含むFlyable()インタフェースを作成でき
るぞ。そうすれば飛ぶべきカモだけがその
インタフェースを実装し、
fly()
メソッドを
持つことになるな。また、すべてのカモが
鳴くわけではないので、
Quackable
インタ
フェースも作成したほうがよさそうだ。
fly()
Flyable
display()
fly()
quack()
MallardDuck
6
1
章
継承は解決策ではない