「Template」とは、「プラスチック板に文字・図形などの外形をくりぬいた製図用具」の事を言います。
Templateを利用して製図すると、枠組みが同じ文字・図形を作成できます。ただ、どんな筆記具で製図するか、どんな色で製図するか等により、できあがりの見栄えが変わってきます。つまり、「Template Method パターン」とは、処理手順の枠組みを提供するパターンです。
具体的には、スーパークラスで処理手順の枠組みを決め、その手順で利用するメソッドを抽象メソッドで定義しておきます。そしてその抽象メソッドを、サブクラスで実装し、具体的な処理内容を定義するという形になります。
Template Methodパターンのクラス図
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