Template Method パターン

「Template」とは、「プラスチック板に文字・図形などの外形をくりぬいた製図用具」の事を言います。

Templateを利用して製図すると、枠組みが同じ文字・図形を作成できます。ただ、どんな筆記具で製図するか、どんな色で製図するか等により、できあがりの見栄えが変わってきます。つまり、「Template Method パターン」とは、処理手順の枠組みを提供するパターンです。

具体的には、スーパークラスで処理手順の枠組みを決め、その手順で利用するメソッドを抽象メソッドで定義しておきます。そしてその抽象メソッドを、サブクラスで実装し、具体的な処理内容を定義するという形になります。


役割り

1. AbstractClass(抽象クラス)
テンプレートメソッドを実装します。また、テンプレートメソッドで使用するメソッドを抽象メソッドで定義します。
2. ConcreteClass(具象クラス)
「AbstractClass」で定義した抽象メソッドを実装します。ここで実装した抽象メソッドは、「AbstractClass」のテンプレートメソッドで使用されます。
3. Client(利用者)
「Template Method」パターンを適用したクラスを利用し処理します。

▲PageTop

クラス図

Template Methodパターンのクラス図

Template Methodパターン クラス図

▲PageTop

サンプル

ソースコード

1. AbstractClass.java

public abstract class AbstractClass {
    /** 「templateMethod」に「final」修飾子を付けをオーバーライド出来ないようにします。
         処理内容をサブクラスで変更されるのを禁止します。 */
    public final void templateMethod(){
        method1();
        method2();
    }
    /** 外部から直接アクセスさせないようにします。サブクラスでのオーバーライドを強制という意味を込めて「protected」にします。 */
    protected abstract void method1();
    protected abstract void method2();
}

2. ConcreteClass.java

public class ConcreteClass extends AbstractClass {
    public void method1(){
        System.out.println("method1");
    }
    public void method2(){
        System.out.println("method2");
    }
}

3. Client.java

public class Client {
    public static void main(String[] args){
        AbstractClass AC = new ConcreteClass();
        AC.templateMethod();
    }
}

実行結果

C:\sample\desin_pattern\template_method>javac Client.java [Enter]

C:\sample\desin_pattern\template_method>java Client [Enter]
method1
method2
        

▲PageTop