0

Command模式有三个主要组件:调用器命令接收机。客户端提供了祈求提供信息,以调用特定方法M上的接收机必需的,而它是命令对象(其容纳由接收机)实际调用M命令模式不是依赖倒置原理的实现吗?

一)为了贯彻落实CP我们必须脱钩调用者与命令的数量逻辑,这样的方式,当我们增加指令数,祈求类没有改变。我们通过让命令对象和Invoker取决于抽象(即接口)。

因此,是不是CP只是具体实现DIP

b)若CP确实DIP的实现,那么是什么让CP与其他类型的DIP实施的有什么不同?我们不能认为DIP的所有其他实现也有Invoker对象(即更高级别的模块),命令对象(即提供更高级别模块的行为的依赖关系),而将考虑Receiver依赖对象(即低级别模块)调用的任何方法?

谢谢


编辑:

一)

的依赖对象保持相关性作为一个领域,并将其用于 所有后续的方法调用。

如果依赖对象不保持这种依赖作为一个领域,因此不使用它为所有的来电subsequnt,而是它总是收到一个新的依赖的对象,可能我们则认为,我们有a CP而不是DI

反之亦然 - 如果调用程序总是调用相同的命令对象,可能我们则认为,我们有DI,而不是CP,不管是什么工作命令对象实际执行?b)我理解你正在努力创造的点,但是我仍然有一些重大的麻烦来区分什么使某件事成为行为,什么是一个命令。从我的角度来看,向Invoker传递命令也可以被解释为注入依赖对象所需的行为来完成它的工作。它是真的很明确还是更主观?因此,我们如何判断一个对象所做的工作是命令还是行为?

回答

1

该命令模式不会注入任何东西到对象中。它的命令传递给调用命令的方法(通常只有一次)。

依赖注入喷射一个依赖性(即由从属对象来完成其工作所需的另一个目的)。依赖对象将依赖项保存为字段,并将其用于所有后续的方法调用。

如果你需要一个类比,依赖注入包括给厨师烤箱,让他准备所有的菜肴。指挥模式包括给他一碗配料,每次有人要求一道菜时准备。

编辑:

命令图案在于使抽象类的一些接口,它只是定义了一个方法(​​)的实现。调用者调用这个命令时不知道它可以做什么,或者它的作用是什么。该模式的原理是能够传递命令界面的多个不同实现(例如,向上,向下,向左)。调用者可能会存储这些实例以便稍后执行它们,或者将它们存储以撤消它们。

依赖关系注入只包括传递一个依赖关系,一旦依赖对象被初始化。这种依赖关系提供了大量明确标识的方法,这些方法被依赖对象用作其自身业务逻辑的一部分。

两者都使用对象和调用方法,但目标非常不同。

所以我对你的观点a)的回答是:是或否,取决于。如果对象是普通对象,提供了不同的方法,并且它不是仅有一个方法的单个接口的许多实现之一,而是依赖对象根据需要调用它,但它不构成命令。

b)阅读http://en.wikipedia.org/wiki/Command_pattern中的示例代码,应该使其更清晰。

+0

嗨,万一你找时间帮我一些 - 我已经编辑了我的帖子 – user1483278 2012-07-07 20:29:33

+0

谢谢你的帮助 – user1483278 2012-07-10 15:51:09