TemplateMethodパターン
ある処理のおおまかなアルゴリズムをあらかじめ決めておいて、そのアルゴリズムの具体的な設計をサブクラスに任せることである。 [Wikipediaより]
要はほとんど処理をスーパークラスに決めておいて、用途ごとに変更になる部分を継承してサブクラスに実装させるということみたいです。
public class Main { public static void main(String[] args) { AbstractDisplay a2 = new StringDisplay("ai"); a2.display(); } } abstract class AbstractDisplay { public abstract void open(); public abstract void output(); public abstract void close(); public final void display() { open(); for (int i = 0; i < 5; i++) { output(); } close(); } } class StringDisplay extends AbstractDisplay{ private String string; private int width; public StringDisplay(String string) { this.string = string; this.width = string.getBytes().length; } @Override public void open() { print(); } @Override public void output() { System.out.println("|"+ string +"|"); } @Override public void close() { print(); } private void print(){ System.out.print("+"); for (int i = 0; i < width; i++) { System.out.print("-"); } System.out.println("+"); } }
使い方としてはスーパークラスを抽象クラスにして、そこにメインのアルゴリズムを実装する。サブクラスはスーパークラスを継承して使う。メインの処理のアルゴリズムはスーパークラスにあって、それを使いまわすから、テンプレートメソッドなわけです。