4

为什么我需要使用责任链,如果我可以将所有命令加载到某个容器中并一一执行命令。这将连续处理一个请求。顺便说一句,我觉得它比 CoR 更好,因为您可以在运行时删除一些特定命令或替换为另一个命令,而对于 CoR,您需要创建另一个链来更改链中的某些内容,因为您无法访问链除了第一个元素。(实际上,它是一个单链表。)

4

1 回答 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 回答