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

Design patterns 责任链与队列或堆栈中的命令,design-patterns,containers,command-pattern,chain-of-responsibility,Design Patterns,Containers,Command Pattern,Chain Of Responsibility,如果我可以将所有命令加载到某个容器中,然后一个接一个地执行命令,那么为什么我需要使用责任链呢。这将形成一个处理一行请求的链。顺便说一句,我觉得它比CoR好,因为您可以在运行时删除某些特定命令或替换为另一个命令,而对于CoR,您需要创建另一个链来更改链中的某些内容,因为除了第一个元素之外,您无法访问链中的元素。(实际上,它是一个单一的链表。)只是为了“保持它的简单性”:-) 在您特别需要的时候创建一个队列/堆栈,并且您会知道何时需要它,不是吗 例如,如果您必须执行一些简单的数据操作,如: data

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

只是为了“保持它的简单性”:-)

在您特别需要的时候创建一个队列/堆栈,并且您会知道何时需要它,不是吗

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

data.clean().format().save(); 
vs

还要注意,我必须编写更多代码来创建新的数据结构(命令堆栈)

但我们可以说这是一个更具战略意义的游戏,比如射击游戏。玩家可以被枪杀,等等,结果取决于游戏中选择的难度等级

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


希望有帮助。

哪一个比较简单?COR还是stack?对我来说,两者都是相同的sh*t。您已经将堆栈与static
data.clean().format().save()进行了比较。但我问的是stack vs COR,因为运行时的更改可以在两者中进行,就像在COR中可以创建新的链一样
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);
};