关于策略模式的应用

来源: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

这个你要考虑场景,首先策略是说针对不同的条件采取不同策略,看这个代码是没有这个场景的

0
1
Edward_han
非常感谢
2018-12-02
共1条回复

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程