ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

デザインパターン:TemplateMethodパターン

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("+");
    }
}

使い方としてはスーパークラスを抽象クラスにして、そこにメインのアルゴリズムを実装する。サブクラスはスーパークラスを継承して使う。メインの処理のアルゴリズムはスーパークラスにあって、それを使いまわすから、テンプレートメソッドなわけです。