模板方法(Template Pattern)的使用

定义:

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。


推荐实例:

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)进行管理。

你可能感兴趣的:(设计模式)