[Template] とは, [プラスチック板に文字, 図形などの外形をくるぬいた製図用具] のことを言う.
Template を利用して製図すると, 枠組みが同じ文字, 図形を作成できる. ただ, どんな筆記具で製図するか, どんな色で製図するか等により, できあがりの見栄えあ変わってくる. つまり, [Template Method パターン] とは, 処理手順の枠組みを提供するパターン.
具体的には, スーパークラスで処理手順の枠組みを決め, その手順で利用するメソッドを抽象メソッドで定義しておく. そしてその抽象メソッドを, サブクラスで実装し, 具体的な処理内容を定義するという形になる.
テンプレートメソッドを実装する. また, テンプレートメソッドで使用するメソッド を抽象メソッドで定義する.
[AbstractClass] で定義した抽象メソッドを実装する. ここで実装した抽象メソッド は, [AbstractClass] のテンプレートメソッドで使用される.
[Template Method] パターンを適用したクラスを利用し処理する.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public abstract class AbstractClass{
/*
[templateMethod] に [final] 修飾子を付けをオーバーライドできないようにする
処理内容をサブクラスで変更されるのを禁止する.
*/
public final void templateMethod(){
method1();
method2();
method3();
method4();
}
/*
外部から直接アクセスさせないようにする. サブクラスでのオーバーライド
を強制という意味を込めて [protected] にする.
*/
protected abstract void method1();
protected abstract void method2();
protected abstract void method3();
protected abstract void method4();
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class ConcreteClass extends AbstractClass{
public void method1(){
System.out.println("method1");
}
public void method2(){
System.out.println("method2");
}
public void method3(){
System.out.println("method3");
}
public void method4(){
System.out.println("method4");
}
}
|
1 2 3 4 5 6 | public class Client{
public static void main(String[] args){
AbstractClass ac = new ConcreteClass();
ac.templateMethod();
}
}
|
上記のプログラムの実行結果:
[wtopia TemplateMethod]$ java Client
method1
method2
method3
method4