请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于策略模式的应用

老师,有办法把下面这段代码改造成策略模式吗?
这段就是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;
   }

正在回答 回答被采纳积分+3

1回答

Geely 2018-12-02 20:43:36

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

0 回复 有任何疑惑可以回复我~
  • 提问者 Edward_han #1
    非常感谢
    回复 有任何疑惑可以回复我~ 2018-12-02 20:49:40
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号