初めてデザインパターンを学んだとき、一番理解しやすいと感じたのがTemplateMethodパターンでした。
今回の例は
http://www.dofactory.com/Patterns/PatternTemplate.aspx#_self2
これです。
なんかデータベースへのアクセスをしてますが、書き直したバージョンでは無理やりコンパイルを通しただけにしちゃいました。
DataAccessObject::Run()がテンプレート的な役割を果たしていて、
・データベースに接続して
・データを抽出して
・抽出したデータを処理して
・データベースから切断する
という流れ自体は常に同じです。
ただ、"どんなデータを抽出するか"と、"抽出したデータをどう処理するか"というのはいろいろ切り替えられたほうが便利なのでSelect()とProcessをvirtual関数にして子クラスでオーバーライドできるようにしておきます。
https://github.com/TakahashiShuuhei/DesignPatternPractice/blob/master/TemplateMethod.cpp