テンプレートメソッドパターン
あくまで自分の経験則だが、テンプレートメソッドパターンって、実装していく課程で自然と見つかる(見つけるではない)パターンであり、設計時から一貫して適用するってことはあまり無いんじゃないか。
インタフェースを決定する ↓ 実装するクラスを書く ↓ クラスを書いているうちに、共通の実装を見つける ↓ 共通の実装をスーパークラス(仮想クラス)に導出 ↓ テンプレートパターンのできあがり
こんな感じ。
きちんと時間をかけて設計していないのではないか、という突っ込みもあろうが、実装が増えていくことで見えてくることもあるはずだ。
個別の実装クラスでオーバライドされるメソッドの数は少ないほど良いと思う。
総称(ジェネリクス)が使える言語であればテンプレートで総称型を上手く使うことによりキャストが減らせるとなお良し。