知识卡片

命令链框架处理组合选项的独立处理与混合处理两种思路

普通读书笔记卡 · 1870.b.9.b

内容

[[用责任链模式扩展命令族只增类不改代码印证开闭原则]]搭建的框架有真实缺口:像 “ls -l -a”这类组合选项还未处理,因责任链默认语义是”谁能处理就返回”。两种补救思路: 独立处理——把组合当新参数字符串新增处理类,简单但类数量会爆炸增长;混合处理——改造 传递语义让节点处理完继续转发,由顶层Command收集组装多个结果(返回值改为集合)。发散: 责任链默认假设只有一个节点负责,多节点参与需主动改造协议。

参考来源

- 位置:《设计模式之禅(第2版)》第34章《命令模式+责任链模式》34.2节(源文件:_epub-src/text/part0152.html) - 结论依据:原文指出"'ls-l-a'这样的组合选项还没有处理",并给出两种思路:"独立处理……把'ls-la'中的选项'la'作为一个参数来进行处理,扩展一个类就可以了。该方法的缺点是类膨胀得太大……混合处理……每个命令处理节点运行完毕后,继续由后续节点处理,最终由Command类组装结果……链上的节点返回值就要放在Collection类型中了"。 - 原始内容:可能读者已经注意到了,"ls-l-a"这样的组合选项还没有处理……独立处理……"ls-la"中的选项"la"作为一个参数来进行处理,扩展一个类就可以了。该方法的缺点是类膨胀得太大,但是简单……混合处理……每个命令处理节点运行完毕后,继续由后续节点处理,最终由Command类组装结果……链上的节点返回值就要放在Collection类型中了。