TemplateMethodパターンの雑感
メモ
- ロジックの手順を定義し、個々のロジックの実装はサブクラスに先送りするパターン
- コード再利用のための基本的な話
- 抽象クラスが定義するのは以下
- フックはクラス内で何もしないか、またはデフォルトの振る舞いを実行する
- サブクラスで適宜オーバーライドもできる
- サブクラスがテンプレートメソッドを変更しないようにfinal修飾子を宣言しておく必要がある
- 「こちらを呼び出さないでください。こちらから呼び出します。」
- スーパークラスが主導権を持ち、必要に応じてサブクラスを呼び出す(実処理を実行する)ように設計するべき
- Storategyパターンと混同しがちだが、Storategyパターンはコンポジションを用いてロジックをカプセル化するのに対して、TemplateMethodパターンは継承を用いてロジックをカプセル化する
- FactoryMethodはTemplateMethodの特化型と言えるかもしれない
- サブクラスがスーパークラスを呼び出すことは許されないのか?
- スーパークラスが定義する抽象メソッドの数が多すぎると実装が超めんどくさいと思うのだが
実例
- JavaのArray.sort()など
- 教科書通りには設計されていないが、「実装をサブクラスに先送りする」という思想が存在する
実装
- 時間がない