Template Methodテンプレートメソッド-デザインパターンの勉強

Template Methodテンプレートメソッドのお勉強。
このデザインパターンスーパークラスで処理の流れを決めて、サブクラスで具体的な処理を実装します。

クラス 説明
Calc.java スーパークラス テンプレートメソッド
Tashizan.java サブクラス
Kakezan.java サブクラス
Main.java テスト用クラス
Calc.java
  1 public abstract class Calc {
  2   public final void proc() {         //final宣言によりこのメソッドはオーバライドできない
  3     print();
  4     calc();
  5     finish();
  6   } 
  7   protected abstract void print(); //protectedにより、サブクラスでないとオーバライドできない
  8   protected abstract void calc();
  9   protected abstract void finish();
 10 }
Tashizan.java
  1 public class Tashizan extends Calc {
  2   int i; 
  3   int j;
  4   public Tashizan (int i,int j) {
  5     this.i = i;
  6     this.j = j;
  7   }
  8   protected void print() {
  9     System.out.print(i +"+" +j +" = ");
 10   }
 11   protected void calc() {
 12     System.out.println(i+j);
 13   }
 14   protected void finish() {
 15     System.out.println("足し算終了");
 16   }
 17 }
Kakezan.java
  1 public class Kakezan extends Calc {
  2   int i; 
  3   int j;
  4   public Kakezan (int i,int j) {
  5     this.i = i;
  6     this.j = j;
  7   }
  8   protected void print() {
  9     System.out.print(i +"*" +j +" = ");
 10   }
 11   protected void calc() {
 12     System.out.println(i*j);
 13   }
 14   protected void finish() {
 15     System.out.println("かけ算終了");
 16   }
 17 }
Main.java
  1 public class Main {
  2   public static void main(String[] args) {
  3     Calc calc1 = new Tashizan(1,1);
  4     calc1.proc(); 
  5     Calc calc2 = new Kakezan(2,2);
  6     calc2.proc();
  7   }
  8 } 

実行してみる。

$ java Main
1+1 = 2
足し算終了
2*2 = 4
かけ算終了

わーい。

2008年12月23日追記

・Template Method(テンプレートメソッド)って、どういデザインパターンなのか名前から想起しやすいな。
・Mesodじゃなくて、Methodだからね。Mesodだとgoogle先生に聞いても、答えてくれないよ。