命令设计模式 - Invoker是否可选?

jag*_*ags 10 design-patterns command-pattern

在命令设计模式中,Invoker类是可选的吗?客户端需要为命令实例化Concrete Command和Receiver.客户端是否总是需要实例化Invoker并将命令对象传递给Invoker对象.稍后当客户端需要执行命令时,客户端只询问Invoker对象并且Invoker执行命令(可能立即或可能将命令排队等待以后执行).

或者这是另一种方式?如果客户端需要同步执行命令,客户端将使用基类接口引用该命令,但将实例化具体的命令和接收器.每当客户端需要执行命令时,客户端只会在基类命令变量上调用execute方法?当一个命令应该执行时需要一些额外的逻辑时,Invoker类将用于保留额外的逻辑,客户端将与Invoker对象进行交互以执行命令?

And*_*sen 6

Command模式的目的通常是1)使一组不同的操作共享相同的类型,以便它们可以由相同的代码处理2)从操作调用中单独的操作编组/创建.出于目的2明确要求接收者.

如果你在创建后立即调用,或者如果Reciever扮演调用者的角色,那么就没有单一用途的独立调用者.这是否意味着没有调用者真的是一个哲学问题:)

以这种方式看待它:你/可以/分离创建,调度和调用.这并不意味着您必须将它们实现为三个单独的类.它只是Command模式生命周期中涉及的逻辑角色.

编辑:我认为单一责任原则认为你应该将它们分开,但是有一个像commen意识的东西:)可以而且应该遵守当地条件.