一、定义
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
如果上面的话不好理解,请看下面的例子
二、示例
1)定义一个模板类:原则就是将所有子类通用的功能直接放在模板类里面,每个子类独有的功能放到子类来实现,不管是哪个子类,都要执行excute里面容的内容。
public abstract class Template { //通用功能,所有的子类都要执行的方法 public void beforeAction(){ System.out.println("记录开始时间"); } //这是一个钩子方法,里面的业务逻辑是由子类来实现的 public abstract void action(); //通用功能,所有的子类都要执行的方法 public void afterAction(){ System.out.println("记录完成时间"); } //上面定义里面说的算法骨架,其实主要就是体现在这里,主要是完成某一个功能所需要的步骤,所有的子类都会执行该步骤,只不过每个步骤实现的细节可能不同 public void excute(){ this.beforeAction(); this.action(); this.afterAction(); }}
2)第一个模板实现类:
public class TemplateImpl1 extends Template { public void action() { System.out.println("这是第一个模版实现类"); }}
3)第二个模板实现类:
public class TemplateImpl2 extends Template { public void action() { System.out.println("这是第二个模版实现类"); }}
4)测试类:
public class Client { public static void main(String[] args){ Template template1 = new TemplateImpl1(); Template template2 = new TemplateImpl2(); template1.excute(); template2.excute(); }}
记录开始时间这是第一个模版实现类记录完成时间记录开始时间这是第二个模版实现类记录完成时间