1.模式定义:定义一个操作的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些
abstract class AbstractClass{
public void operation(){
System.out.println("connect mysql...");
System.out.println("pre...");
System.out.println("open...");
templateMethod();
System.out.println("close...");
}
abstract protected void templateMethod();
}
class SubClass1 extends AbstractClass{
@Override
protected void templateMethod() {
System.out.println("insert into user(...) values(...)");
}
}
class SubClass2 extends AbstractClass{
@Override
protected void templateMethod() {
System.out.println("select * from user");
}
}
public class TemplateMethodTest {
public static void main(String[] args) {
AbstractClass abstractClass = new SubClass1();
abstractClass.operation();
System.out.println("-----------------------");
abstractClass = new SubClass2();
abstractClass.operation();
}
}
如上图,像一些数据库连接、打开、关闭之类的操作其实并不需要交由客户端每次去控制,这也容易增加出错的机率,对于客户端来说只需要关心使用就可以了。
应用场景
1.当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构时,请使用TemplateMethod模式。
2.当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用此模式。
优点:
1.你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分发生的更改对它们的影响。
2.你可以将重复的代码拖放到超类中。
ServletApi&Spring中的应用
1javax.servlet.http.HttpServlet
2org.springframework.web.servlet.mvc.AbstractController