定义:
模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。
推荐实例:
1、首先定义一个模板(Template
)
/**
* 一个信息处理工具模板
**/
public abstract class MessageHandler<REQ, RESP> {
private static final Logger logger = LoggerFactory.getLogger(MessageHandler.class);
public RESP processer(REQ request){
REQ beforeReq = beforeHandle(request) ;
logger.info("#####请求处理之前,进行参数校验。beforeReq:{}", beforeReq);
RESP resp = handle(beforeReq);
logger.info("#####请求处理,返回的结果为resp为:{}", resp);
RESP afterResp = afterHandle(beforeReq ,resp) ;
logger.info("#####请求处理之后,进行响应结果再封装。afterResp:{}", afterResp);
return afterResp;
}
/* 通常对传入的参数进行校验 */
protected abstract REQ beforeHandle(REQ request);
/* 真正处理请求 */
protected abstract RESP handle(REQ request);
/* 处理后,对请求结果进行封装 */
protected abstract RESP afterHandle(REQ request, RESP resp);
}
2、定义一个模板实现:
/*
* 微信信息处理器
*/
public class Wechat_MessageHandler extends MessageHandler<Object, Object>{
@Override
protected Object beforeHandle(Object request) {
System.out.println("进行相关参数校验.......");
return request;
}
@Override
protected Object handle(Object request) {
System.out.println("进行相关信息处理......");
return new Object();
}
@Override
protected Object afterHandle(Object request, Object o) {
System.out.println("进行相关响应封装......");
return o;
}
}
3、测试:
/*
* 测试调用微信信息处理器
*/
public static void main(String[] args) {
MessageHandler wehatMsgHandle = new Wechat_MessageHandler();
Object result = wehatMsgHandle.processer(new Object());
//.....
}
当模板实现多了之后,推荐使用工厂(如MapFactoryBean
)进行管理。