コードメモ > デザインパターン > テンプレート


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Abstructで処理を穴抜きにしてしまって、

継承を利用して処理を埋める。

リファクタリングのメソッドの引き上げをした結果、この形になるという場合や、

はたまた設計の段階でabstructにしておいてしまうなど。

似ているパターンとして

メソッドオブジェクトの利用をし、strategyパターンへの委譲に持っていく場合もある。

public class CharDisplay extends AbstractDisplay {
  private char ch;
  public CharDisplay(char ch){
    this.ch=ch;
  }
  public void open(){
    System.out.print("<<");
  }
  public void print(){
    System.out.print(ch);
  }
  public void close(){
    System.out.println(">>");
  }
}
public abstract class AbstractDisplay{
  public abstract void open();
  public abstract void print();
  public abstract void close();
  public final void display(){
    open();
    for (int i=0;i<5;i++){
      print();
    }
    close();
  }
}
public class StringDisplay extends AbstractDisplay{
  private String string;
  private int width;

  public StringDisplay(String string) {
    this.string = string;
    this.width = string.getBytes().length;
  }
  public void open() {
    printLine();
  }
  public void print() {
    System.out.println("|"+string+"|");
  }
  public void close() {
    printLine();
  }
  private void printLine() {
    System.out.print("+");
    for (int i=0;i<width;i++) {
      System.out.print("-");
    }
    System.out.println("+");
  }
}
public class Entry {
  public static void main(String[] args){
    AbstractDisplay d1 = new CharDisplay('H');
    AbstractDisplay d2 = new StringDisplay("Hello, world.");
    AbstractDisplay d3 = new StringDisplay("こんち。");

    d1.display();
    d2.display();
    d3.display();
  }
}