Template Methodパターンの実装例 (Java)
[履歴] [最終更新] (2013/08/16 10:24:31)
最近の投稿
注目の記事

概要

ある処理フローの大まかな流れ (Template Method) をAbstractClassに記述しておき、実際の具体的な処理はConcreteClassに記述します。システムのフレームワークを実装する場合等に用いられます。

サンプルコード

sample.java

abstract class AbstractClass {
    public abstract void task1();
    public abstract void task2();
    public final void taskFlow() { //final修飾子 (継承先でオーバーライド不可)
        task1();
        task2();
    }
}

class ConcreteClass1 extends AbstractClass {
    private int val;
    public ConcreteClass1(int val) {this.val=val;}
    public void task1() {System.out.println(val+val);}
    public void task2() {System.out.println(val*val);}
}

class ConcreteClass2 extends AbstractClass {
    private int val;
    public ConcreteClass2(int val) {this.val=val;}
    public void task1() {System.out.println(val-val);}
    public void task2() {System.out.println(val/val);}
}

class Sample {
    public static void main(String args[]) {
        AbstractClass obj1 = new ConcreteClass1(1);
        AbstractClass obj2 = new ConcreteClass2(1);
        obj1.taskFlow();
        obj2.taskFlow();
    }
}

実行例

$ javac sample.java && java Sample
2
1
0
1
関連ページ
    概要 こちらのページでは、ある処理フローの大まかな流れをAbstractClassに記述しておき、実際の具体的な処理はConcreteClassに記述するという、システムのフレームワークを実装する場合に有用なTemplate Methodパターンを紹介しました。このTemplate Methodを用いて、インスタンスの生成処理のフレームワークを実装する場合を特にFactory Methodパター