大话设计模式
字体: 16 + -

第183章

大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。”