Closed4
Template Method パターン
Template Method パターンとは
定義
アルゴリズムの骨組みをスーパークラスで定義して、サブクラスではアルゴリズムの全体的な構造は残したまま、ステップを上書きする振る舞い関連のデザインパターン
クラス図
Template Method パターン適用フロー
STEP1: 適用に値する状況かどうかを確認する
以下いずれかなら次のステップに進む。
- クライアントにアルゴリズムの一部を拡張させたい
- 些細な違いを除いてほとんど同じアルゴリズムのクラスがいくつかある
STEP2: メリット > デメリットであることを確認する
メリット
- アルゴリズムの特定の部分だけを上書きできて、他部分への変更の影響を受けにくくできる
- 重複コードをスーパークラスにまとめられる
デメリット
- クライアントにとってアルゴリズムの骨組みが不十分である可能性がある
- サブクラスでステップのデフォルト実装をオーバーライドして無効化すると、 リスコフの置換原則に違反してしまう可能性がある
- ステップ数が多いほどテンプレートメソッドの保守が困難になる傾向がある
STEP3: コードを書く
アルゴリズムを分析
アルゴリズムを分析して以下ステップに分ける
- サブクラス間で共通
- 常にサブクラスに固有
抽象スーパークラスを宣言
以下メソッドを宣言
- テンプレートメソッド
-
final
の宣言を検討
-
- アルゴリズムの各ステップに対応する抽象メソッド
- もし有益ならデフォルト実装を用意する
- アルゴリズムの重要なステップの間にフックを追加することを検討する
サブクラスを作成
抽象メソッドを全て実装する。
また、任意のステップを上書きしてもよい。
Template Method パターンの現実的な実装例
参考リンク
ここに書いてあることから多く影響を得ている。
上記は和訳が少しわかりづらいのでデザインパターンを全く知らない人は以下を通読とするといい。
このスクラップは2023/10/02にクローズされました