
284
8
章
アルゴリズムを抽象化する
prepareRecipe()
を抽象化する
最初の問題は、
Coffee
が
brewCoffeeGrinds()
メソッドと
addSugarAndMilk()
メソッドを使うのに対し、
Tea
が
steepTeaBag()
メソッドと
addLemon()
メ
ソッドを使う点です。
サブクラス(
Coffee
クラスと
Tea
クラス)から
prepareRecipe()
を抽象化し
ていきましょう。
1
これについてよく考えてみましょう。浸す(
steep
)ことと淹れる(
brew
)ことは、それ
ほど変わりがなく、よく似ています。そこで、例えば
brew()
という新しいメソッド名を作
り、コーヒーを淹れる場合にも紅茶を浸す場合にも同じ名前を使うようにしましょう。
同様に、砂糖とミルクを加えることは、レモンを加えることとほとんど同じです。どち
らも飲み物にコンディメントを加えています。これに対処するため、新しいメソッド名
addCondiments()
も作成しましょう。すると、新しい
prepareRecipe()
メソッドはこうなり
ます。
void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
void prepareRecipe() {
boilWater();
steepTeaBag();
pourInCup();
addLemon();
}
Tea
void prepareRecipe() {