Template Method〜処理手順の重複排除〜 <- 言葉で理解するデザインパターン <- TetraCalibers
TetraCalibers :
    -   for : science student & programmer
言葉で理解するデザインパターン - 4
Template Method
処理手順の重複排除

     

    目的

     

    • 似たような処理手順を複数パターンに応じて実装したい

     

    色違いのぬいぐるみを作るとき、すべて型紙から作りますか?

     

    型紙は一つ作ればそれで済むはず。

     

    同じように、同じ工程をもつメソッドには共通の型紙(テンプレート)を作ってしまえ!という思想から、このパターンは始まる。

     

    適用例

     

    • 入力されたデータを、CSV・JSON・XML・YAMLの4つのフォーマットでそれぞれファイル出力したい

     

    実装のポイント

     

    1. 抽象クラス(AbstractClass)内に、各手順の抽象メソッドとそれらを組み合わせた処理全体を示す抽象メソッドを定義する(共通の処理は抽象クラス内で具体的に実装してもよい)
    2. 各場合ごとにその抽象クラスを継承したクラス(ConcreteClass)を作成し、具体的な処理を実装する

     

    hook-operation

     

    拡張させたいポイントにテンプレートメソッドを用意しておくと、拡張可能な箇所を明示することができる。