一、出现的原因
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式处理。
特点是:去除子类中重复代码来体现它的优势,提供了一个很好的代码复用平台
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。它简单,但是作用很大,对于程序员来说,最不可避免的就是重复的代码。学习之后,我们将可以得到解放。
二、模板方法案例
/** * 模板方法之模拟学生考试 * TestPaper 试卷类 * @author Administrator * */ public class TestPaper { /** * protected这个特效关键字被保护,final子类不可重写,所以要慎重选择修饰词的使用 */ protected final void question1() { System.out.println("问题一"); System.out.println("答案:" + answer1());//answer1() 将答案改成一个虚的方法 } protected final void question2() { System.out.println("问题二"); System.out.println("答案:"+answer2()); } protected final void question3() { System.out.println("问题三"); System.out.println("答案:"+answer3()); } /** * 此方法继承的目的就是给继承的子类重写, * 因为这里的每个人的答案都不一样 * @return question1的答案 */ public String answer1() { return ""; } public String answer2() { return ""; } public String answer3() { return ""; } }
/** * 模板方法之模拟学生考试 StudentOne 模拟学生一 * * @author Administrator * */ public class StudentOne extends TestPaper { /* * 重写了试卷类的方法,放回响应的答案 */ @Override public String answer1() { // TODO Auto-generated method stub return "a"; } @Override public String answer2() { // TODO Auto-generated method stub return "b"; } @Override public String answer3() { // TODO Auto-generated method stub return "c"; } }
/** 模板方法 --测试 * @author Administrator * */ public class Test { public static void main(String[] args) { StudentOne stu1 = new StudentOne(); System.out.println("学生一"); stu1.question1(); stu1.question2(); stu1.question3(); StudentTwo stu2 = new StudentTwo(); System.out.println("学生二"); stu2.question1(); stu2.question2(); stu2.question3(); } }
模板方法模式可以大大的减少我们的代码,也可以使用中团队中的业务处理。