为什么我需要使用责任链,如果我可以将所有命令加载到某个容器中并一一执行命令。这将连续处理一个请求。顺便说一句,我觉得它比 CoR 更好,因为您可以在运行时删除一些特定命令或替换为另一个命令,而对于 CoR,您需要创建另一个链来更改链中的某些内容,因为您无法访问链除了第一个元素。(实际上,它是一个单链表。)
问问题
2188 次
1 回答
0
只是为了“保持简单傻”:-)
在您特别需要时创建一个队列/堆栈,您会知道何时需要它,不是吗?
例如 - 如果您必须进行一些简单的数据操作,例如:
data.clean().format().save();
对比
commands.push(new Cleaner(data));
commands.push(new Formatter(data));
commands.push(new Updates(data));
commands.execute();
还要注意,我必须编写更多代码来创建新的数据结构(命令堆栈)。
但可以说这是更具战略性的东西,比如射击游戏。玩家可以被枪杀、被杀等,结果取决于游戏选择的难度级别。
headShot = new Command();
headShot.push(new FreezePlayer());
headShot.push(new BleedPlayer());
headShot.push(new KillPlayer());
bodyShot = new Command();
headShot.push(new FreezePlayer());
headShot.push(new BleedPlayer());
headShot.push(new LooseHealth());
player.onHit = function(hitPoint){
hitPoint.aboveNeck() ? headShot.on(this) : bodyShot.on(this);
};
请注意,在这种情况下,我们必须创建一个可以在运行时传递并发生的策略。
所以在简单模式下,bodyShot 可能没有最后一个元素(LooseHealth),headShot 可能有 LooseHealth 而不是 KillPlayer 作为最后一个元素。
希望能帮助到你。
于 2015-09-11T12:01:29.080 回答