デザインパターン - Template Method
【TemplateMethodパターンとは】
テンプレート機能を持つパターンです。
テンプレート機能を持つスーパークラスでは枠を決めて、具体的な処理はサーブクラスで実装し、
スーパークラスで決められた順番で実行するパターンである。
【TemplateMethodパターンのクラス図】
【TemplateMethodパターンのメリット】
流れは同じだが具体的な処理が異なる派生ができるようにする。
【サンプル】
SuperClass.java |
package templateMethod;
/**
* テンプレートクラス
*/
public abstract class SuperClass {
protected abstract void writeStartLine();
protected abstract void writeEndLine();
protected abstract void showBody();
public void show() {
writeStartLine();
for(int i = 0; i < 5; i++){
showBody();
}
writeEndLine();
}
}
|
Adaptee.java |
package adapter;
/**
* 被せられるクラス
*/
public class Adaptee {
public void method() {
System.out.println("私は再利用されるメソッドです。");
}
}
|
SubClass1.java |
package templateMethod;
/**
* サブクラス1
*/
public class SubClass1 extends SuperClass{
@Override
protected void writeStartLine() {
System.out.println("------------------------");
}
@Override
protected void writeEndLine() {
System.out.println("=========================");
}
@Override
protected void showBody() {
System.out.println("本文を表示します!!!");
}
}
|
SubClass2.java |
package templateMethod;
/**
* サブクラス2
*/
public class SubClass2 extends SuperClass{
@Override
protected void writeStartLine() {
System.out.println("***********************");
}
@Override
protected void writeEndLine() {
System.out.println("**********************");
}
@Override
protected void showBody() {
System.out.println("ABCDEFGHKIJLLLLLLL");
}
}
|
TemplateMethodTest.java |
package templateMethod;
public class TemplateMethodTest {
public static void main(String[] args) {
SuperClass sup1 = new SubClass1();
SuperClass sup2 = new SubClass2();
sup1.show();
sup2.show();
}
}
|
テスト結果 |
------------------------
本文を表示します!!!
本文を表示します!!!
本文を表示します!!!
本文を表示します!!!
本文を表示します!!!
=========================
***********************
ABCDEFGHKIJLLLLLLL
ABCDEFGHKIJLLLLLLL
ABCDEFGHKIJLLLLLLL
ABCDEFGHKIJLLLLLLL
ABCDEFGHKIJLLLLLLL
**********************
|
※結果として、具体的に何が出力されるがわからないが、
writeStartLine()が1回
writeEndLine()が5回
showBody()が1回実行される。