一、定义
一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为。
二、意图
定义了在一个操作中的算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法结构而重新定义特定的算法步骤。
具体来说,就是假设有一个work方法,其中有步骤:1.准备 2.实施 3.结束,那么work就是算法的一个框架。假设这个work方法中的步骤 “1.准备阶段” 已经在定义方法时实现了,而“ 2.实施阶段” 由于每个人的方式不同,所以定义为抽象的,留给其具体的子类去实现。对于不同的员工子类来说,只要实现其中的“2.实施”就可以了,而不需要去改变整个算法的流程框架。
三、实例
public class TemplateDemo {
public static void main(String[] args) {
Teacher t1 = new DBTeacher();
t1.work();
Teacher t2 = new JavaTeacher();
t2.work();
}
}
abstract class Teacher{
public void prepared(){
System.out.println("准备上课");
System.out.println("打开投影仪");
}
private void end() {
System.out.println("关闭投影仪");
System.out.println("下课");
}
//模板方法
public void work(){
//1.授课前准备
prepared();
//2.进行授课
teaching();
//3.授课结束
end();
}
//留给子类实现
public abstract void teaching();
}
class DBTeacher extends Teacher{
//对模板方法的抽象方法实现
public void teaching(){
System.out.println("打开数据库");
System.out.println("编写SQL指令");
}
}
class JavaTeacher extends Teacher{
//对模板方法的抽象方法实现
public void teaching(){
System.out.println("打开MyEclipse");
System.out.println("编写一个Java程序");
}
}
四、总结
模板方法模式即预先设计好一个模板,其中的步骤执行方式也设计好,只留下每个子类需要做的步骤为抽象方法(这个方法有时被
称为钩子方法),然后让子类按照早就设计好的执行过程进行。如在上面的实例中,work方法即为设定好的模板,其中的teaching
方法即为钩子方法,由于不同的老师上课时会进行不同的行动,因此要有不同的teaching方法。而在子类被使用时,也是根据创建
的不同子类对象调用不同的teaching方法。