フィールドによるサブクラスの置き換え
概要
定数データだけを返すメソッドだけが異なるサブクラスに対し、そのメソッドをフィールドに変更してサブクラスを削除する
リファクタリング時期
サブクラスが異なる定数を返すだけのメソッドになってしまったとき
手順
サブクラスに「Factory Method によるコンストラクタの置き換え」を適用する
サブクラスを参照している部分を、スーパークラスを参照するように変更
スーパークラスの Constant Method ごとに final フィールドを定義
そのフィールドを初期化する protected コンストラクタをスーパークラスに作る
サブクラスのコンストラクタを追加または変更して、スーパークラスのコンストラクタを呼ぶように変更する
コンパイルしてテスト
スーパークラス中の各 Constant Method でそのフィールドを返すように実装して、サブクラスからそのメソッドを削除する
サブクラスのメソッドが全て削除されたら、スーパークラスの Factory Method に「メソッドのインライン化」を適用
コンパイルしてテスト
サブクラスを削除
コンパイルしてテスト
サブクラスがなくなるまで繰り返す