■ はじめに
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