1700481944
/usr 102400
1700481945
1700481946
/home t10240000
1700481947
1700481948
#df-g
1700481949
1700481950
/
1700481951
1700481952
10
1700481953
1700481954
/usr 100
1700481955
1700481956
/home t10000
1700481957
1700481958
#
1700481959
1700481960
仅仅增加类就完成了变更,这才是我们要的结果:对修改关闭,对扩展开放。
1700481961
1700481962
1700481963
1700481964
1700481966
设计模式之禅 34.2 混编小结
1700481967
1700481968
在这里的例子中用到了以下模式:
1700481969
1700481970
❑责任链模式
1700481971
1700481972
负责对命令的参数进行解析,而且所有的扩展都是增加链数量和节点,不涉及原有的代码变更。
1700481973
1700481974
❑命令模式
1700481975
1700481976
负责命令的分发,把适当的命令分发到指定的链上。
1700481977
1700481978
❑模板方法模式
1700481979
1700481980
在Command类以及子类中,buildChain方法是模板方法,只是没有基本方法而已;在责任链模式的CommandName类中,用了一个典型的模板方法handlerMessage,它调用了基本方法,基本方法由各个实现类实现,非常有利于扩展。
1700481981
1700481982
❑迭代器模式
1700481983
1700481984
在for循环中我们多次用到类似for(Class c:classes)的结构,是谁来支撑该方法运行?当然是迭代器模式,只是JDK已经把它融入到了API中,更方便使用了。
1700481985
1700481986
可能读者已经注意到了,“ls-l-a”这样的组合选项还没有处理。确实没有处理,以下提供两个思路来处理:
1700481987
1700481988
❑独立处理
1700481989
1700481990
“ls-l-a”等同于”ls-la”,也等同于”ls-al”命令,可以把”ls-la”中的选项”la”作为一个参数来进行处理,扩展一个类就可以了。该方法的缺点是类膨胀得太大,但是简单。
1700481991
1700481992
❑混合处理
1700481993
[
上一页 ]
[ :1.700481944e+09 ]
[
下一页 ]