[size=medium]
前一段时间我们阅读了Digester的最初始的版本1.0版,现在我们再看一下1.1版,看看变化
来领悟作者的重构思路。
首先我们来看一下这个版本的更新:
[/size]
[size=medium]
1. 增加了一个Rules接口,原来是放到Digester里面的
用一个HashMap<String, ArrayList<Rule>>的来保存所有的Rule的,所有的add,removey以及
lookup操作都是在Digester里面进行的,现在把这个抽取出来,感觉非常合理,Digester只是
依赖于Rues,而相关的操作都是在Rules里面进行的;
[/size]
[size=medium]
2. ObjectCreationFactory, AbstractObjectCreationFactory, FactoryCreateRule类,这个
其实也很好理解,主要是支持了通过传递一个ObjectCreationFactory,通过FactoryCreateRule来
创建一个Object,这样就可以使用用户的工厂来创建对象了。
[/size]
[size=medium]
3. 刚才我们谈到了,这个地方增加了一个新的接口Rules,它也增加了一个基本的实现RulesBase类,这个里面其实就是使用了一个HashMap<String, ArrayList<Rule>>的数据结构,不过它里面有一个cache,一个rules,在加入的时候时候cache和rules同时写的,然后
内部使用的是cache来实现增删改查,对外在调用getRules的时候,返回的时候rules。
[/size]
[size=medium]
4. 里面还增加了一个ExtendedBaseRules,不过在这个版本没有使用,
就是增加了更多的匹配的选项,支持通配符等,这个还没有仔细看,不过
应该变化不大。
[/size]
[size=medium]
5. 变化还有Digester,它也相应的做出了一些调整,最大的变化应该时候
增加了一个ArrayStack paramStack,这样在CallMethodRule和CallParamRule的
时候就不会再把参数压到盛放object的那个stack里面了。
[/size]
[size=medium]
6. 还有一个比较大的变化点就是增加了一个RuleSet和一个它的标准实现
RuleSetBase,它允许用户根据namespaceURI来定义一组rule,在Digester的
addRuleSet方法里面会调用RuleSet的addRuleInstances,实际上在它的实现
里面时候将一些rule增加到RulesBase里面。
[/size]
[img]http://dl.iteye.com/upload/attachment/202767/12e0e7cf-ac9c-356e-8cc3-c19ed640e7fd.png[/img]
前一段时间我们阅读了Digester的最初始的版本1.0版,现在我们再看一下1.1版,看看变化
来领悟作者的重构思路。
首先我们来看一下这个版本的更新:
[/size]
[size=medium]
1. 增加了一个Rules接口,原来是放到Digester里面的
用一个HashMap<String, ArrayList<Rule>>的来保存所有的Rule的,所有的add,removey以及
lookup操作都是在Digester里面进行的,现在把这个抽取出来,感觉非常合理,Digester只是
依赖于Rues,而相关的操作都是在Rules里面进行的;
[/size]
[size=medium]
2. ObjectCreationFactory, AbstractObjectCreationFactory, FactoryCreateRule类,这个
其实也很好理解,主要是支持了通过传递一个ObjectCreationFactory,通过FactoryCreateRule来
创建一个Object,这样就可以使用用户的工厂来创建对象了。
[/size]
[size=medium]
3. 刚才我们谈到了,这个地方增加了一个新的接口Rules,它也增加了一个基本的实现RulesBase类,这个里面其实就是使用了一个HashMap<String, ArrayList<Rule>>的数据结构,不过它里面有一个cache,一个rules,在加入的时候时候cache和rules同时写的,然后
内部使用的是cache来实现增删改查,对外在调用getRules的时候,返回的时候rules。
[/size]
[size=medium]
4. 里面还增加了一个ExtendedBaseRules,不过在这个版本没有使用,
就是增加了更多的匹配的选项,支持通配符等,这个还没有仔细看,不过
应该变化不大。
[/size]
[size=medium]
5. 变化还有Digester,它也相应的做出了一些调整,最大的变化应该时候
增加了一个ArrayStack paramStack,这样在CallMethodRule和CallParamRule的
时候就不会再把参数压到盛放object的那个stack里面了。
[/size]
[size=medium]
6. 还有一个比较大的变化点就是增加了一个RuleSet和一个它的标准实现
RuleSetBase,它允许用户根据namespaceURI来定义一组rule,在Digester的
addRuleSet方法里面会调用RuleSet的addRuleInstances,实际上在它的实现
里面时候将一些rule增加到RulesBase里面。
[/size]
[img]http://dl.iteye.com/upload/attachment/202767/12e0e7cf-ac9c-356e-8cc3-c19ed640e7fd.png[/img]