読者です 読者をやめる 読者になる 読者になる

liguofeng29’s blog

個人勉強用ブログだっす。

デザインパターン - Template Method

TemplateMethodパターンとは】

テンプレート機能を持つパターンです。

テンプレート機能を持つスーパークラスでは枠を決めて、具体的な処理はサーブクラスで実装し、

スーパークラスで決められた順番で実行するパターンである。

 

TemplateMethodパターンのクラス図】

 

TemplateMethodパターンのメリット】

流れは同じだが具体的な処理が異なる派生ができるようにする。

 

【サンプル】

SuperClass.java
 
/**
 * テンプレートクラス
 */
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
 
/**
 * サブクラス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
 
/**
 * サブクラス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
 
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回実行される。