状況
- 同じ結果をもたらすメソッドが複数のサブクラスに存在する。
対処
メリット
手順
対象とする複数メソッドの内容が同じである事を確認する
メソッド間でシグニチャ(引数や返り値など)が異なる場合は、スーパークラス上への移動を見越して変更する
スーパークラスに新しいメソッドを作成する。一つのメソッドから内容をコピーして、必要に応じて修正を行いコンパイルする
- 各メソッドの中で用いられているメソッドに、処理内容の異なるものがある場合は、スーパークラス上で抽象メソッドとして宣言し、オーバーライドする
- メソッドがサブクラスのフィールドを使用している場合、「フィールドの引き上げ」を適用するか、「自己カプセル化フィールド」を適用して抽象getメソッドとして宣言して使用する
サブクラスのメソッドを一つ削除する
コンパイルしてテストする
スーパークラスのメソッドのみとなるまで、サブクラスのメソッドの削除とテストを続ける
楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本