【デザインパターン】【Java】Template Method パターン

■ はじめに

https://dk521123.hatenablog.com/entry/2014/01/29/222538




目次

【1】Template Method パターン
【2】使用実例
【3】デメリット
【4】サンプル

【1】Template Method パターン

 * 具体的な処理をサブクラスにまかせるデザインパターン
 ⇒ プログラム初心者に、実装してもらう時に使えそう
 ⇒ これは使える!

【2】使用実例

 * サーブレット
 →言われてみたら、init()、destroy()とかあるよな。

【3】デメリット

[1] クラスの数が膨大になりやすい
[2] スーパークラス側でアルゴリズムをがっちり固めてしまうと
  サブクラス側での自由度が減り、足かせとなる
  ⇒ こういったケースでは、むしろ使ってはダメ

【4】サンプル

抽象クラス : AbstractSample.java

public abstract class AbstractSample {
   // 初期化処理
    protected abstract void initialize();
    // 主処理
    protected abstract void doIt();
    // 後処理
    protected abstract void finalize();

    /** テンプレートメソッド。 */
    public final void doSomething() {
       // 事前チェック(例えば、セッションチェックなど)
       this.checkSession();
       
       this.initialize();
       
       this.doIt();
       
       this.finalize();
    }
    
    private void checkSession() {
       System.out.println("セッションチェック(めんどいから省略)");
    }
}

具象クラス : ConcreteSample.java

public class ConcreteSample extends AbstractSample {
   @Override
   protected void initialize() {
      System.out.println("初期化");
   }

   @Override
   protected void doIt() {
      System.out.println("主処理");
   }

   @Override
   protected void finalize() {
      System.out.println("後処理");
   }
}

使用者(クライアント) : Main.java

public class Main {
   public static void main(String[] args) {
      AbstractSample sample = new ConcreteSample();
      sample.doSomething();
   }
}

出力結果

セッションチェック(めんどいから省略)
初期化
主処理
後処理

参考文献

* このサイトとは、使う上でのイメージが非常につけやすい

http://www.nulab.co.jp/designPatterns/designPatterns3/designPatterns3-1.html

* 以下も参考になる

http://www.aerith.net/design/TemplateMethod-j.html
その他のサイト
http://www.sgnet.co.jp/java/java06_03.html
http://www.techscore.com/tech/DesignPattern/TemplateMethod.html/
http://www.ie.u-ryukyu.ac.jp/~e085739/java.it.14.html

関連記事

デザインパターンの分類 ~目次~
https://dk521123.hatenablog.com/entry/2014/01/29/222538