gpt4 book ai didi

java - 调用者类在命令模式中的作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:53 24 4
gpt4 key购买 nike

假设我们在 this way 中实现了命令模式

这里我对Invoker的作用有点疑惑。从我的角度来看:

  1. 如果我们确实需要历史记录(或命令执行前的任何类型的操作),那么创建此类是有意义的。但它打破了单一责任原则,是吗?现在它不仅是一个代表,它还在那里存储历史记录。
  2. 如果我们不需要历史记录,我看不到创建这个调用程序的目标,它只是执行委托(delegate)。是个唯一的原因只是一个假设,我们将来在命令执行之前/之后需要某种逻辑吗?

还是我遗漏了什么?

最佳答案

If we do need history (or any kind of action before command execution), then there is a sense in making this class. But then it breaks Single responsibility principle, yeah? Now it's not only a delegate, it also stores history there.

我完全同意 Andreas 的回答。如果您认为自己正在执行多项职责,请将它们分解为不同的方法。

单一职责原则很好听,但我们不应该过多关注该原则。如果你严格遵循这个原则,我敢肯定代码库会被太多的小类弄得乱七八糟。我认为软件行业的任何大型项目都没有使用该原则。我们能做的最好的事情是在同一个类中针对不同的操作使用不同的方法。

If we don't need history, I don't see a goal of creating this invoker, that simply performs delegating. Is the only reason for it is just a assumption, that we would need some kind of logic before/after command execution in the future?

Command 模式的核心 USP 是 Invoker。它解耦了客户端(发送方)和接收方

来自 oodesign文章:

The Client asks for a command to be executed. The Invoker takes the command, encapsulates it and places it in a queue, in case there is something else to do first, and the ConcreteCommand that is in charge of the requested command, sending its result to the Receiver.

我已经在下面的 SE 问题中解释了 Invoker 的作用:

Command Pattern seems needlessly complex (what am I failing to understand?)

关于java - 调用者类在命令模式中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512006/

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