命令模式中实际的业务逻辑属于哪里?
Where does the actual business logic belong in the Command pattern?
Internet 上的示例,如示例 here,让我对 Command
模式感到困惑 在大多数示例中,具体命令直接调用接收方的方法之一。这是具体命令的唯一职责吗?实际的业务逻辑属于哪里?在具体命令的 execute()
方法中还是在接收器上的某些方法中?
另一个问题是,如果我们要实现多线程命令模式,我们的线程池应该从Invoker
和运行方法接收命令,具体命令是execute()
方法吗?我的理解正确吗?
两者皆有可能,我已经使用包含简单应用程序中命令实现的具体命令实现了 Command,但是,在典型的大型应用程序中,命令只需要传达命令类型和任何争论。包含或委托行为的实现取决于接收方。
这是因为客户端必须依赖于具体的命令。如果具体命令反过来需要复杂的依赖关系来实现行为,则客户端也间接依赖于这些复杂的依赖关系,这会导致系统不稳定。相反,具体的命令应该没有复杂的依赖关系,这样客户就可以放心地依赖它们。
[我忽略了你的第二个问题。请移至新问题,以便我们单独回答。]
业务逻辑在于Receiver(大部分逻辑)和ConcreteCommand(部分逻辑)类.
Client 调用 Invoker => Invoker 调用 ConcreteCommand => ConcreteCommand 调用 Receiver 方法,后者实现了抽象的 Command 方法。
优点:客户端不会受到命令和接收器更改的影响。 Invoker 在 Client 和 Receiver 之间提供松耦合。您可以 运行 使用同一个 Invoker 执行多个命令。
线程前端你的理解是正确的。您可以将 ExecutorService 视为 Invoker 和 Runnable 或 Callable作为抽象命令和实现 类 Runnable 或 Callable 作为 Concrete commands/Receivers.我看到 ConcreteCommand 本身在简单的多线程应用程序中扮演着 Receiver 的角色。
看看这个问题以便更好地理解:
Using Command Design pattern
Internet 上的示例,如示例 here,让我对 Command
模式感到困惑 在大多数示例中,具体命令直接调用接收方的方法之一。这是具体命令的唯一职责吗?实际的业务逻辑属于哪里?在具体命令的 execute()
方法中还是在接收器上的某些方法中?
另一个问题是,如果我们要实现多线程命令模式,我们的线程池应该从Invoker
和运行方法接收命令,具体命令是execute()
方法吗?我的理解正确吗?
两者皆有可能,我已经使用包含简单应用程序中命令实现的具体命令实现了 Command,但是,在典型的大型应用程序中,命令只需要传达命令类型和任何争论。包含或委托行为的实现取决于接收方。
这是因为客户端必须依赖于具体的命令。如果具体命令反过来需要复杂的依赖关系来实现行为,则客户端也间接依赖于这些复杂的依赖关系,这会导致系统不稳定。相反,具体的命令应该没有复杂的依赖关系,这样客户就可以放心地依赖它们。
[我忽略了你的第二个问题。请移至新问题,以便我们单独回答。]
业务逻辑在于Receiver(大部分逻辑)和ConcreteCommand(部分逻辑)类.
Client 调用 Invoker => Invoker 调用 ConcreteCommand => ConcreteCommand 调用 Receiver 方法,后者实现了抽象的 Command 方法。
优点:客户端不会受到命令和接收器更改的影响。 Invoker 在 Client 和 Receiver 之间提供松耦合。您可以 运行 使用同一个 Invoker 执行多个命令。
线程前端你的理解是正确的。您可以将 ExecutorService 视为 Invoker 和 Runnable 或 Callable作为抽象命令和实现 类 Runnable 或 Callable 作为 Concrete commands/Receivers.我看到 ConcreteCommand 本身在简单的多线程应用程序中扮演着 Receiver 的角色。
看看这个问题以便更好地理解:
Using Command Design pattern