初步认知
模板模式:抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法。定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类中的主方法,实现对子类的调用,先看个关系图:
简易架构
实例分析
模板抽象类
public abstract class AbstartTemplate {
//主方法,来调动子类的重写的执行方法
public final void execute(String message){
System.out.println("0 step the Abstract Class is executing!");
String introduction = prepare(message);
execute(message,introduction);
}
//提供给子类来重写执行过程
public abstract void execute(String message, String introduction);
public Stringprepare(String message){
System.out.println("1. prepare deliver message is "+message);
return "prepare"+message;
}
}
模板继承类
public class Template extends AbstartTemplate {
@Override
public void execute(String message, String introduction) {
System.out.println("2."+this.getClass().getCanonicalName()+" has executed!");
}
}
测试类
public class TestOfTemplate {
public static void main(String[] args) {
AbstartTemplate template =new Template();
template.execute("comprehension");
}
}
运行结果:
0 step the Abstract Class is executing!
1. prepare deliver message is comprehension
2.com.com.model.design.template.Template has executed!
总结
在主体方法中,prepare方法始终会在实现类中的execute方法之前执行,其实我们还可以在execute方法之后也写一个响应的after方法做相应的操作,这样一来就好比形成了一个固定的模板一样,先执行模板prepare具体操作,在执行实现类中的execute方法,最后执行after中的固定操作。所有继承了此模板的子类都会按照这个步骤或者模式处理相应的业务。
其实在SpringMVC中就有这种类似的模式,Prepare相当于请求处理部分,execute相当action中的具体业务处理(每次处理业务的具体逻辑不同,所以需要每个action根据自身实际重写),after就相当于响应部分。