打字猴:1.700481951e+09
1700481951
1700481952 10
1700481953
1700481954 /usr 100
1700481955
1700481956 /home t10000
1700481957
1700481958 #
1700481959
1700481960 仅仅增加类就完成了变更,这才是我们要的结果:对修改关闭,对扩展开放。
1700481961
1700481962
1700481963
1700481964
1700481965 设计模式之禅 [:1700454081]
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
1700481994 修正命令族处理链,每个命令处理节点运行完毕后,继续由后续节点处理,最终由Command类组装结果,根据每个节点的处理结果,组合后生成完整的返回信息,如”ls-l-a”就应该是LS_L类与LS_A类两者返回值组装的结果,当然链上的节点返回值就要放在Collection类型中了。
1700481995
1700481996 该框架还有一个名称,叫做命令链(Chain of Command)模式,具体来说就是命令模式作为责任链模式的排头兵,由命令模式分发具体的消息到责任链模式。对于该框架,读者可以继续扩展下去。当然,上面的程序还可以优化,优化的结果就是Command类缩为一个类,通过CommandEnum配置文件类传递命令,这比较容易实现,读者可以自行设计。
1700481997
1700481998
1700481999
1700482000
[ 上一页 ]  [ :1.700481951e+09 ]  [ 下一页 ]