テンプレートメソッド(Template Pattern)の使用


定義:
テンプレートメソッドモードは、アルゴリズムのステップを定義し、サブカテゴリが1つ以上のステップに対してその実践方法を提供することを可能にする.アルゴリズムアーキテクチャを変更せずに、サブカテゴリにアルゴリズムのいくつかのステップを再定義させます.
推奨例:
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のような工場を使用して管理することが推奨される.