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