Template Method


Templateとなるクラスを用意し、必ず実装しなければならないメソッドを明示する。



TemplateClass.java (テンプレートとなるクラス)

package gof;

abstract class TemplateClass {

    // abstractで定義されたメソッドは実装必須にする。
    abstract protected void calc();
    abstract protected void show();

    // 呼び出されるメソッド。オーバライド禁止 (final)
    public final void execute(){
        this.calc();
        this.show();
    }
    
}

abstractで定義したcalcとshowメソッドが継承したクラスで必ず実装しなければならない。





TemplateSample.java (TemplateClassを継承したクラス)

package gof;


public class TemplateSample extends TemplateClass {

    int num1;
    int num2;
    int result;

	//コンストラクタ
    public TemplateSample(int n1, int n2){
        num1 = n1;
        num2 = n2;
    }

	//オーバーライドしたメソッド
    protected void calc(){
        result = num1 + num2;
    }
	//オーバーライドしたメソッド
    protected void show(){
        System.out.println(num1 + " + " +  num2 + " = "  + result);
    }

}

calcとshowメソッドを実装する。




TemplateTest.java (実行用クラス)

package gof;


public class TemplateTest{
	
    public static void main(String args[]){
    	
        TemplateSample cls =  new TemplateSample(20, 5);
	
		cls.execute();
    }
}