1.模板方法定义: 定义一个操作中的算法框架,而将一些步骤延迟到子类中。这样使得子类可以不改变一个算法的结构即可从定义该算法的某些特定步骤。Define the skeleton of an algorithm in an operation, deferring some steps to subclass. Template Method lets subclass redefine certain steps of an algorithm without changing the algoritms's structure.
2.简单示例代码
public abstract class TemplateC {
public abstract void Yunqiu();
public abstract void Guoren(); //算法的具体步骤延迟到子类实现。
public abstract void Toulan();
public final void getScore() //定义算法骨架. 为了防止算法骨架被修改 此处可以定义为final
{
System.out.print("我首先");
Yunqiu();
System.out.print("我然后");
Guoren();
System.out.print("我最后");
Toulan();
}
}
public class TemplateSubC extends TemplateC{
@Override
public void Yunqiu() { //子类实现具体算法
// TODO Auto-generated method stub
System.out.println("用左手运球");
}
@Override
public void Guoren() {
// TODO Auto-generated method stub
System.out.println("转身过人");
}
@Override
public void Toulan() {
// TODO Auto-generated method stub
System.out.println("后仰跳投");
}
}
我首先用左手运球
我然后转身过人
我最后后仰跳投
3. 模板方法的优点: 封装不变的部分,扩展可变的部分。封装了一个具体算法结构(执行顺序),然后具体算法可以由不同子类实现,使得子类可以根据具体情况扩展。
缺点:子类执行结果影响了父类的结果,在复杂项目中,会带来代码阅读的难度。