命令模式具有三个主要组件:调用者、命令和接收者。Client 向Invoker提供调用ReceiverM
上 的特定方法所需的信息,而实际调用的是Command对象(由Receiver提供)。M
a) 为了实现CP,我们必须将Invoker 的逻辑与命令的数量分离,这样当我们增加命令的数量时,Invoker类就不必改变。我们通过让Command对象和Invoker依赖于抽象(即接口)来做到这一点。
因此,CP不只是DIP的特定实现吗?
b) 如果CP确实是DIP的实现,那么CP与其他类型的DIP实现究竟有什么不同?也就是说,我们不能说所有其他的DIP实现也有Invoker对象(即更高级别的模块)、Command对象(即为更高级别的模块提供行为的依赖项),而 Receiver 将被视为依赖对象的任何方法(即较低级别的模块)调用?
谢谢你
编辑:
一个)
依赖对象将依赖项保持为一个字段,并将其用于所有后续方法调用。
如果依赖对象不将此依赖项保留为字段,因此它不会将其用于所有后续调用,而是始终接收新的依赖项对象,那么我们是否可以争辩说我们有一个CP而不是DI?
反之亦然——如果 Invoker 总是调用相同的命令对象,那么我们是否可以争辩说我们有DI而不是CP,而不管实际执行的工作命令对象是什么?
b)我理解你试图表达的观点,但我仍然在区分什么是行为和什么是命令时遇到了一些重大问题。在我看来,将命令传递给 Invoker 也可以解释为注入依赖对象完成其工作所需的行为。是真的那么明确还是更主观?因此,我们如何判断一个对象所做的工作是命令还是行为?