gpt4 book ai didi

design-patterns - 责任链与队列或堆栈中的命令

转载 作者:行者123 更新时间:2023-12-04 15:56:10 24 4
gpt4 key购买 nike

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

最佳答案

只是为了“保持简单愚蠢”:-)

当你特别需要它时创建一个队列/堆栈,你会知道什么时候需要它,不是吗?

例如 - 如果您必须进行一些简单的数据操作,例如:

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 作为最后一个元素。

希望能帮助到你。

关于design-patterns - 责任链与队列或堆栈中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32496782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com