关于策略模式的应用
来源:19-2 策略模式coding
Edward_han
2018-11-29
老师,有办法把下面这段代码改造成策略模式吗?
这段就是SpringMVC获取请求参数的代码(简单实现,不是框架源码,亲测可用),这里只用了for循环,据说可以用策略模式搞定,我改了好久,搞不定… 而且对策略模式还是不太会用。
private static Object[] handle(HttpServletRequest request, HttpServletResponse response, Method method){
// 拿到当前待执行的方法有哪些参数
Class<?>[] paramClazzs = method.getParameterTypes();
// 根据参数的个数,new一个参数的数组,将方法里的所有参数赋值到args里
Object[] args = new Object[paramClazzs.length];
int args_i = 0;
int index = 0;
for(Class<?> paramClazz : paramClazzs){
if(ServletRequest.class.isAssignableFrom(paramClazz)){
args[args_i++] = request;
}
if(ServletResponse.class.isAssignableFrom(paramClazz)){
args[args_i++] = response;
}
// 从0-3判断有没有RequestParam注解,很明显paramClazz为0和1时,不是,
// 当为2和3时为RequestParam,需要解析
// [@com.enjoy.edward.annotation.EnjoyRequestParam(value=name)]
Annotation[] paramAns = method.getParameterAnnotations()[index];
if(paramAns.length > 0){
for(Annotation paramAn : paramAns){
if(EnjoyRequestParam.class.isAssignableFrom(paramAn.getClass())){
EnjoyRequestParam rp = (EnjoyRequestParam)paramAn;
// 找到注释里的name和age
args[args_i++] = request.getParameter(rp.value());
}
}
}
index++;
}
return args;
}
写回答
1回答
-
Geely
2018-12-02
这个你要考虑场景,首先策略是说针对不同的条件采取不同策略,看这个代码是没有这个场景的
012018-12-02
相似问题