【导读】有很多过程是有流程步骤的,即是先做什么,后做什么,都已经定义好了,但具体每个步骤怎么去实现交由具体实施人。这个就是模板方法。
一、定义
定义了一个算法骨架,允许子类为一个或多个步骤提供实现。使子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。
二、实例
比如房屋建造有几个步骤,地基、主体以及装修。此时会有毛坯房以及精装修两种情况。
抽象房屋对象:
public abstract class AbstractHouse {
/**
*@author liusy
*@date 2020/3/6 0006 23:53
*@desc 定义一个建造房屋的固定步骤,也就是模板
*@param * @param null
*@return
*/
protected final void makeHouse(){
makeBase();
makeFrame();
//是否需要进行精装修
if (isFitment()) {
makeFitment();
}
System.out.println("房子建造完成");
}
final void makeBase(){
System.out.println("创建地基");
}
final void makeFrame(){
System.out.println("建造主体");
}
final void makeFitment(){
System.out.println("对房子进行精装修");
}
/**
*@author liusy
*@date 2020/3/6 0006 23:52
*@desc
*@param * @param null
*@return 是否需要进行精装修
*/
protected abstract boolean isFitment();
}
精装修:
public class FitmentHouse extends AbstractHouse{
@Override
protected boolean isFitment() {
return true;
}
}
毛坯房:
public class RoughcastHourse extends AbstractHouse{
//返回false表示不需要进行精装修
@Override
protected boolean isFitment() {
return false;
}
}
测试类:
//精装修
AbstractHouse house = new FitmentHouse();
house.makeHouse();
System.out.println("==============================");
//毛坯房
AbstractHouse house1 = new RoughcastHourse();
house1.makeHouse();
运行结果:
接下来看一下类图:
三、源码实例
(1)HttpServlet的doGet或者doPost方法