版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qixinbruce/article/details/79211806
“横看成岭侧成峰,远近高低各不同”
说的就是山是同一座山,但是不同的人站在不同的角度,看到的山的样子也不一样。就像最近在看一档节目,叫做《最强大脑》,里面都是天才、神童、天之骄子,都是站在智商顶峰的一群人,对于节目中难到变态的题目,我只会笑一笑然后放弃,但是那些天才们经过一阵头脑风暴后,问题总会迎刃而解。题目还是那些题目,但是对于答题的人来讲,答案却是五花八门。
说了这么多,就是为了引出今天要说的设计模式——【模板方法模式】。所谓模板,就是固定下来不变的东西,比如考试时的试卷,每个人的领到的试卷题目都是相同的,但是考试的人给出的答案就有对有错,这就是模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法是的子类可以不改变一个算法的结构,即可定义该算法的某些特定步骤。
就拿学生答题举例,试卷就是模板,学生的答案就是子类的方法,代码如下:
试卷类:
public class TestPaper {
public void QuestionA() {
System.out.print("试题一:A.x B.x C.x D.x ");
System.out.println("答案为:" + AnswerA());
}
protected String AnswerA() {
return "";
}
public void QuestionB() {
System.out.print("试题二:A.x B.x C.x D.x ");
System.out.println("答案为:" + AnswerB());
}
protected String AnswerB() {
return "";
}
public void QuestionC() {
System.out.print("试题三:A.x B.x C.x D.x ");
System.out.println("答案为:" + AnswerC());
}
protected String AnswerC() {
return "";
}
}
学生A:
public class StudentA extends TestPaper {
@Override
protected String AnswerA() {
return "A";
}
@Override
protected String AnswerB() {
return "B";
}
@Override
protected String AnswerC() {
return "C";
}
}
学生B:
public class StudentB extends TestPaper {
@Override
protected String AnswerA() {
return "A";
}
@Override
protected String AnswerB() {
return "B";
}
@Override
protected String AnswerC() {
return "C";
}
}
客户端:
public class Paper {
public static void main(String[] args) {
TestPaper answerA = new StudentA();
System.out.println("学生A:");
answerA.QuestionA();
answerA.QuestionB();
answerA.QuestionC();
TestPaper answerB = new StudentB();
System.out.println("学生B:");
answerB.QuestionA();
answerB.QuestionB();
answerB.QuestionC();
}
}
输出结果: