テンプレートメソッドパターンは、動作中のアルゴリズムのスケルトンを定義し、サブクラスへのいくつかのステップを遅らせます。テンプレートメソッドを使用すると、サブクラスは、アルゴリズムの構造を変更せずに、アルゴリズムの特定のステップを再定義できます。
テンプレートメソッドは、不変の動作をスーパークラスに移動し、サブクラスの繰り返されるコードを削除することにより、優れたコード再利用プラットフォームを提供します。
public abstract class TestPaper {
public abstract void Answer1(); //抽象行为,放到子类去实现
public abstract void Answer2();
public void Test1() {
//模板方法,重复的部分都放在父类,而逻辑的组成都是抽象行为,推迟到子类实现
System.out.print("Test1 ");
Answer1();
}
public void Test2(){
System.out.print("Test2 ");
Answer2();
}
}
public class TestPaperA extends TestPaper{
@Override
public void Answer1() {
System.out.println("studentA Test1选a"); //子类各自的抽象行为的不同实现
}
@Override
public void Answer2() {
System.out.println("studentA Test2选b");
}
}
public class TestPaperB extends TestPaper{
@Override
public void Answer1() {
System.out.println("studentB Test1选c");
}
@Override
public void Answer2() {
System.out.println("studentB Test2选d");
}
public static void main(String[] args) {
TestPaper studentA = new TestPaperA(); //声明为父类,利用多态进行复用
studentA.Test1();
studentA.Test2();
TestPaper studentB = new TestPaperB();
studentB.Test1();
studentB.Test2();
}
}
出力:
Test1 studentA Test1选a
Test2 studentA Test2选b
Test1 studentB Test1选c
Test2 studentB Test2选d