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