Template Method パターン

Template Method パターン（テンプレート・メソッド・パターン）とは、GoF (Gang of Four; 4人組) によって定義されたデザインパターンの1つである。「振る舞いに関するパターン」に属する。Template Method パターンの目的は、ある処理のおおまかなアルゴリズムをあらかじめ決めておいて、そのアルゴリズムの具体的な設計をサブクラスに任せることである。そのため、システムのフレームワークを構築するための手段としてよく活用される。
クラス図.
以下に Template Method パターンのクラス図を挙げる。
codice_1 で定義されている抽象メソッドの可視性が protected (#) なのは、このメソッドが codice_2 内でのみ使用されることを想定しているからである。
利用例.
以下にTemplate Method パターンを使って文字列型配列を書式化してリストアップするJavaプログラムの例を示す。
abstract class StringLister {
 protected abstract String formatHeader();
 protected abstract String formatItem(String item);
 protected abstract String formatFooter();
 public final String display(String[] items) {
 StringBuilder result = new StringBuilder(this.formatHeader());
 for (String item : items) {
 result.append(this.formatItem(item));
 result.append(this.formatFooter());
 return result.toString();
class PlainTextStringLister extends StringLister {
 protected String formatHeader() {
 return "";
 protected String formatItem(String item) {
 return " - " + item + "\r\n";
 protected String formatFooter() {
 return "";
class HtmlStringLister extends StringLister {
 protected String formatHeader() {
 return "<ul>\r\n";
 protected String formatItem(String item) {
 return " <li>" + item + "</li>\r\n";
 protected String formatFooter() {
 return "<ul>\r\n";
public class TemplateMethodTest {
 public static void main(String[] argv) {
 String[] items = {"First", "Second", "Third"};
 StringLister l1 = new PlainTextStringLister();
 StringLister l2 = new HtmlStringLister();
 System.out.println(l1.display(items));
 System.out.println(l2.display(items));
このサンプルを実行すると、次の実行結果が得られる。最初の3行が codice_3 の返り値で、空行を挟んでその後にある出力が codice_4 の返り値である。
 - First
 - Second
 - Third
<ul>
 <li>First</li>
 <li>Second</li>
 <li>Third</li>
</ul>
参考までに、クラス図との対応関係を示す。
関係するパターン.
Factory Method パターンは、内部に Template Method パターンを包含することが多い。