Template Method パターン

デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。 前回の Atapterからの続き。

今回は Template Method。なんとなく先読みした Factory の前段となる形になりそう。

Template Method パターンの目的は、ある処理のおおまかなアルゴリズムをあらかじめ決めておいて、そのアルゴリズムの具体的な設計をサブクラスに任せることである。そのため、システムのフレームワークを構築するための手段としてよく活用される。

親(スーパークラス)から子(サブクラス)に共通の処理をさせるのではなくて、逆に親が共通の処理を持って、子が独自の処理を行なう。ただし子が行なう処理は abstract のような形で雛形を作って強制する(依頼といった方がいいか?)。といった形だと思う。

クラス図

Template Method PlantUML

自分としての理解・疑問

  • オブジェクト指向を最初に触れた時、一番「なるほど」と思った所は親が共通化した子の処理を使うのではなく、親が共通化した処理を持っていて子供が違う処理を追加できるという逆の発想だったので、こういう実際の形になって説明されるとさらに分かりやすいと感じた。

話しは若干ズレるけど、php で echo を伴ったテストを追加する場合は下のように「ob_start」なんかを使えばいいのか。と勉強になったりした。

    public function testDisplay()
    {
        $d1 = new CharDisplay('H');
        ob_start();
        $d1->display();
        $actual = ob_get_clean();
        $expected = '<<HHHHH>>'."\n";
        $this->assertEquals($expected, $actual);
    }

参考