模版方法,意思就是给定一个模版,由子类去根据自己实际情况具体实现
有点是代码复用性高,拓展方便,缺点是场景越多,子类越多,系统越庞大;
使用场景: 多个地方步骤,流程类似,只是具体行为,内容不一样,即可用模版方法模式;
结构:
通用模版:包含模板方法 ,执行方法;
各个不同场景:各个子类具体实现
调用类:根据不同场景给定不同参数调用模版方法
例子:学生考试 试题都一样 学生不一样 结果也有所不同
定义试卷模版:
public abstract class TestPages{
public abstract void ChoiceQuestion1();
public abstract void ChoiceQuestion2();
public abstract void fillInTheBlanks();
public abstract void AnswerQuestions();
protected void excut(){
this.ChoiceQuestion1();
this.ChoiceQuestion2();
this.fillInTheBlanks();
this.AnswerQuestions();
}
}
public class student1 extends TestPages{
private String name="小明";
@Override
public abstract void ChoiceQuestion1(){
System.out.println(name+",选择题第一题结果:a");
}
@Override
public abstract void ChoiceQuestion2(){
System.out.println(name+",选择题第二题结果:c");
}
@Override
public abstract void fillInTheBlanks(){
System.out.println(name+",填空题第一题结果:35");
}
@Override
public abstract void AnswerQuestions(){
System.out.println(name+",解答题第一题结果:证明1+1=2成立");
}
}
public class student2 extends TestPages{
private String name="小辉";
public abstract void ChoiceQuestion1(){
System.out.println(name+",选择题第一题结果是:b");
}
public abstract void ChoiceQuestion2(){
System.out.println(name+",选择题第二题结果是:d");
}
public abstract void fillInTheBlanks(){
System.out.println(name+",填空题第一题结果是:42");
}
public abstract void AnswerQuestions(){
System.out.println(name+",解答题第一题结果是:1+1=2不成立");
}
}
public class TestTemplete(){
public static void main(String[] args) {
TestPages t1 = new student1();
TestPages t2 = new student2();
t1.excut();
t2.excut();
}
}
输出:
小明,选择题第一题结果是:a
小明,选择题第二题结果是:c
小明,填空题第一题结果是:35
小明,解答题第一题结果是:1+1=2成立
小辉,选择题第一题结果是:b
小辉,选择题第二题结果是:d
小辉,填空题第一题结果是:42
小辉,解答题第一题结果是:1+1=2不成立