这个模式2006年我就知道了,当时通过学习网络和书籍等相关资料,能够理解并写写示例代码,但2013年的今天被人问起来,想了想,脑子里一片空白,愣是一句没说上来,自己感觉真可笑,最后只能以“不记得了”作为答复,让我很纠结,纠结不已。其实平时项目中经常见到类似的实现,并且自己也常用该模式编写继承结构,但没有意识到在用Template设计模式,当然这听起来是借口,也确实是事实。闲话少说,进入正题。根据对Template模式的理解,简单画了画该模式的示意图:
Template模式特征:
1.父类,abstract类。根据业务需要定义抽象方法或已实现的方法。
2.子类,extend抽象类。实现抽象方法,通过在不同子类中抽象方法的不同实现来体现业务处理的不同。
HttpServlet应用Template模式(参考tomcat6.0.18),参见下图:
HttpServlet中的service方法就是combine方法,是负责处理多种请求方式的集合入口,根据不同的请求类型分发到不同的处理方法,包括doGet()、doHead()、doPost()、doPut()、doDelete()、doOptions()、doTrace()等几种方法,这几个方法都是protected类型。
编写自定义servlet时,通常首先继承HttpServlet类,然后实现doPost()和doGet(),其中一个原因是虽然这两个方法在HttpServlet中被实现,但没做什么具体处理,需要子类来扩展实现。每个自定义servlet类中的doGet()和doPost(),根据业务的不同做具体实现,便于对父类的复用和子类的扩展,较好地体现了Template模板的主旨。