打字猴:1.70048505e+09
1700485050
1700485051 由于在XML配置文档中有太多的拦截器链,因此需要有一个工厂来创建它,否则太繁琐。如代码清单38-17所示。
1700485052
1700485053 代码清单38-17 拦截器链工厂
1700485054
1700485055 public class InterceptorFactory{
1700485056
1700485057 public static ArrayList<Interceptors>createInterceptors(){
1700485058
1700485059 //根据配置文件创建出所有的拦截器链
1700485060
1700485061 return null;
1700485062
1700485063 }
1700485064
1700485065 }
1700485066
1700485067 它的作用是根据配置文件一次性地创建出所有的拦截器,很简单的工厂方法模式。如果读者还记得我们刚刚讲的配置文件更新问题的话,应该想到这里也应该有一个观察者,配置文件修改了,拦截器链当然也要重建了,确实应该有这样一个观察者,读者可以自行思考如何实现。
1700485068
1700485069
1700485070
1700485071
1700485072 设计模式之禅 38.1.3 值栈
1700485073
1700485074 值栈按道理说应该很简单,就是把HTTP传递过来的String字符串压到堆栈中。听起来很简单,实现起来就比较有难度了,它要完成两个职责:
1700485075
1700485076 ❑管理堆栈
1700485077
1700485078 不仅仅是出栈、入栈这么简单,它要管理栈中数据,同时还要允许前置拦截器对栈中数据进行修改,限制后置拦截器对栈的修改,还要把栈中数据与HTTPServletRequest中的数据建立关联。
1700485079
1700485080 ❑值映射
1700485081
1700485082 从HTTP传递过来的数据都是字符串结构,那怎么才能转化成一个业务对象呢?比如在页面上有一个登录框,输入用户名(userName)和密码(password)。提交到MVC框架中怎么才能转为一个User对象呢?这也是值栈要完成的职责。
1700485083
1700485084 这里说一下值映射,怎么实现一个值的映射,这也是一个反射操作的结果。首先是HTTP传递过来的参数名称中要明确映射到哪一个对象,例如使用.(点号)区分,点号前是对象名称,点号后是属性名,如此规定后就可以轻松地处理了。由于使用的模式较少,这里就不再赘述。读者若有兴趣可以考虑使用一些开源工具,比如dozer等。
1700485085
1700485086
1700485087
1700485088
1700485089 设计模式之禅 38.1.4 视图管理器
1700485090
1700485091 视图管理器的功能很单一,按照模型指定的要求返回视图,在这里用到的主要模式就是桥梁模式,如果大家做过多语言的开发就非常清楚了,比如一个外部网站,提供中日英三种语言版本,我们不可能每个语言都写一套页面吧。一般是定义一个语言资源文件,然后视图根据不同的语言环境加载不同的语言。我们先来说视图,它包含三部分:
1700485092
1700485093 ❑静态页面
1700485094
1700485095 比如图片放在什么地方,字体大小是什么样子,菜单应该放置在什么地方,这部分工作是由前台人员开发的,不涉及业务逻辑和业务数据。
1700485096
1700485097 ❑动态页面元素
1700485098
1700485099 它指的是在一个固定场景下不发生变化但在异构场景中发生变化的元素,其中语言就属于动态页面元素,还有为使用不同浏览器而开发的代码。比如现在浏览器版本太多了,像IE、Firefox、Chrome等等,虽然基本上都是符合HTML,但是还有一些细节差异,特别是在JavaScript的处理方面,稍不注意就可能产生灾难。
[ 上一页 ]  [ :1.70048505e+09 ]  [ 下一页 ]