
不変な部分から変化する部分を分離する
D
u
c
k
ク
ラ
ス
Duck
クラスは依然としてすべて
のカモのスーパークラスですが、
飛ぶ振る舞いと鳴く振る舞いを取
り出し、別のクラス構造にそれぞ
れ配置します。
多様な振る舞いの実装が
ここに含まれることにな
ります。
これで、飛ぶ振る舞いと鳴く振
る舞いはそれぞれ独自のクラ
ス群を持ちます。
カモの振る舞い
鳴
く
振
る
舞
い
飛
ぶ
振
る
舞
い
変化する部分を
取り出す
まず、どこから始めましょうか?
いまのところ、
fly()
と
quack()
の問題を除けば
Duck
ク
ラスはうまく機能しています。頻繁に変化しそうな部分は他にありません。したがって、
わずかな変更以外は、
Duck
クラスをほとんどそのままにするつもりです。
では、「不変な部分から変化する部分を」分離するために、(
Duck
クラスとは全く別の)
2
組のクラスを作成します。
1
つは飛ぶためのクラスで、もう
1
つは鳴くためのクラスです。
各組のクラスは、それぞれの振る舞いの実装すべてを備えます。例えば、あるクラスはガー
ガー鳴く振る舞いを実装し、別のクラスはキューキューという音を出す振る舞いを実装し、
また別のクラスは沈黙する振る舞いを実装します。
fly()
と
quack()
は、
Duck
クラスのカモの種類ごとに変化する部分である
ことがわかっています。
このような振る舞いを
Duck
クラスから分離するため、この
2
つのメソッド
を
Duck
クラスから取り出し、それぞれの振る舞いを表す新しいクラス群
を作成します。
10
1
章
変化する部分を取り出す