定义
定义一个操作中的算法的框架,而将一些步骤延迟到子类中,是的子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
模板方法模式的角色
1:抽象模板(Abstract Template)
该角色定义各一个或多个抽象操作,以便让子类实现,这些抽象操作是基本操作,以便让子类实现;抽象模板实现对基本方法的调度;
public abstract class AbstractTemplate{
public abstract void operation1();
public abstract void operation2();
public void doDispatch(){
this.operation1();
this.operation2();
}
}
2:具体模板(Concreate Template)
该角色实现抽象模板中定义的一个或者多个抽象方法。
public class ConcreateTemplate extends AbstractTemplate{
@Override
public void operation1(){
System.out.println("I am operation1");
}
@Override
public void operation2(){
System.out.println("I am operation2");
}
}
客户端调用:
public class Client{
public static void main(String [] args){
AbstractTemplate template = new ConcreteTemplate();
template.doDispatch();
}
}
优点
1:封装不变的部分,扩展可变的部分,便于扩展。
2:提取公共部分的代码,便于维护。
3:行为由父类控制,子类实现。符合开闭原则。
使用场景
1:子类有多个公共方法,并且逻辑基本相同时
2:可以把重要的,复杂的核心算法设计为模板方法,细节由子类实现。
3:重构时模板方法是经常用到的模式,将相同的代码抽取到父类中。
参考资料:设计模式(java)