实习期间需要维护预处理系统,读源代码的过程中学习了高手对设计模式的运用,记录以备后用。
1.关于职责链
属于设计模式的一种,具体不多科普,随手可查,我这里举个简单的例子。将程序的请求(输入)放到一条流水线上,让流水线的工人去一步步加工请求,这之中少了工人ABCD也可以完成处理,因为每个工人负责的部分是不同的,当然少了某个工人出来的产品(输出)就不同了,但一条流水线不会因为一个工人不在而停工的,而且在加工的过程中工人职责独立所以耦合度低,非常方便替换。这就是我理解的职责链。
2.在JAVA中的使用
在读源代码的过程中,观察到预处理系统引入了Apache.Common.chain这个包,经过查资料和看API后了解到这时apache提供的工具包中关于职责链的实现,只需要按需求实现接口即可完成职责链。
2.1 职责链上的职责类,需要实现Command接口,实现excute方法,这个方法的返回值表示是否传送到下个职责上,每个职责(CMD)在执行时都会调用这个方法,每个职责的功能逻辑就要在这里面实现。
2.2请求的实现,关于请求只需要
Context context = new ContextBase();
这样就实现了一个请求,一个未加工过的产品。Context实现了Map接口,当成map使用即可,将需要加工的数据包装好放进去,就可以等待工人的操作。
2.3职责链配置文件
在resource目录下新建chains-config文件,大致结构如下
<catalog>
<!-- 入口 -->
<chain name="preprocess">
<command className="com.xxx.yyy"
id="AreaReferTag" />
</chain>
</catalog>
所有的cmd都如图配置
2.4启动职责链
ChainsCatalogLoader.getChains(CHAIN_NAME).execute(context);