Closed4

Template Method パターン

まゆる :)まゆる :)

Template Method パターン適用フロー

STEP1: 適用に値する状況かどうかを確認する

以下いずれかなら次のステップに進む。

  • クライアントにアルゴリズムの一部を拡張させたい
  • 些細な違いを除いてほとんど同じアルゴリズムのクラスがいくつかある

STEP2: メリット > デメリットであることを確認する

メリット

  • アルゴリズムの特定の部分だけを上書きできて、他部分への変更の影響を受けにくくできる
  • 重複コードをスーパークラスにまとめられる

デメリット

  • クライアントにとってアルゴリズムの骨組みが不十分である可能性がある
  • サブクラスでステップのデフォルト実装をオーバーライドして無効化すると、 リスコフの置換原則に違反してしまう可能性がある
  • ステップ数が多いほどテンプレートメソッドの保守が困難になる傾向がある

STEP3: コードを書く

アルゴリズムを分析

アルゴリズムを分析して以下ステップに分ける

  • サブクラス間で共通
  • 常にサブクラスに固有

抽象スーパークラスを宣言

以下メソッドを宣言

  • テンプレートメソッド
    • finalの宣言を検討
  • アルゴリズムの各ステップに対応する抽象メソッド
    • もし有益ならデフォルト実装を用意する
    • アルゴリズムの重要なステップの間にフックを追加することを検討する

サブクラスを作成

抽象メソッドを全て実装する。
また、任意のステップを上書きしてもよい。

このスクラップは2023/10/02にクローズされました