大B:“由於在JUnit中,參雜了其它的模式在裡面,使得命令模式的特點不太明顯。我給你講講以命令模式在Web開發中最常見的應用——Struts中Action的使用作為例子。”
小A:“嗯。好的。”
大B:“在Struts中Action控制類是整個框架的核心,它連線著頁面請求和後臺業務邏輯處理。按照框架設計,每一個繼承自Action的子類,都實現execute方法——呼叫後臺真正處理業務的物件來完成任務。”
大B:“需要注意的是:繼承自DispatchAction的子類,則可以一個類裡面處理多個類似的操作。”
下面我們將Struts中的各個類與命令模式中的角色對號入座。
先來看下命令角色——Action控制類
publicclassAction{
……
/*
*可以看出,Action中提供了兩個版本的執行介面,而且實現了預設的空實現。
*/
publicActionForwardexecute(ActionMappingmapping,
ActionFormform,
ServletRequestrequest,
ServletResponseresponse)
throwsException{
try{
returnexecute(mapping,form,(HttpServletRequest)request,
(HttpServletResponse)response);
}catch(ClassCastExceptione){
returnnull;
}
}
publicActionForwardexecute(ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsException{
returnnull;
}
}
下面的就是請求者角色,它僅僅負責呼叫命令角色執行操作。
publicclassRequestProcessor{
……
protectedActionForwardprocessActionPerform(HttpServletRequestrequest,
HttpServletResponseresponse,
Actionaction,
ActionFormform,
ActionMappingmapping)
throwsIOException,ServletException{
try{
return(action.execute(mapping,form,request,response));
}catch(Exceptione){
return(processException(request,response,e,form,mapping));
}
}
}
大B:“Struts框架為我們提供了以上兩個角色,要使用struts框架完成自己的業務邏輯,剩下的三個角色就要由我們自己來實現了。”
小A:“那要怎麼去實現啊?”
大B:“實現的步驟如下:1、很明顯我們要先實現一個Action的子類,並重寫execute方法。在此方法中呼叫業務模組的相應物件來完成任務。2、實現處理業務的業務類。3、配置struts-config.xml配置檔案,將自己的Action和Form以及相應頁面結合起來。4、編寫jsp,在頁面中顯式的制定對應的處理Action。”