2015-05-09 56 views
3

例子,像例如here,弄得我關於Command模式在大多數例子中具體的命令直接調用的接收器的方法之一。這是具體命令的唯一責任嗎?實際的業務邏輯屬於哪裏?在具體命令的​​方法中還是在接收方的某種方法中?實際業務邏輯在Command模式中屬於哪裏?在互聯網上

另一個問題是,如果我們想要實現多線程命令模式,我們的線程池應該接收來自Invoker的命令並運行​​具體命令的方法?我的理解是否正確?

+3

命令的執行必須觸發接收器。無論您是直接在接收器內寫入業務邏輯,還是從接收器內將其委託給另一個類,都是您必須作出的選擇。這就是說,你在一個問題中問了兩個不相關的問題。理想情況下,您的第二個問題應作爲另一個問題發佈,以增加獲得答案的機會。另外,我也完全不理解你的第二個問題。你能否詳細說明一下? – CKing

回答

1

要麼是可能的,我已經實現了指揮與包含在簡單的應用程序命令的執行具體命令,但是,在典型的大型應用程序,命令需要做的無非就是傳達命令和任何參數的類型。由接收者來決定是否包含或委託實現該行爲。

這是因爲客戶端必須依賴於具體的命令。如果具體命令又需要複雜的依賴性來實現行爲,那麼客戶端間接依賴於那些複雜的依賴關係,這會導致系統不穩定。相反,具體的命令應該沒有複雜的依賴關係,這樣客戶端就可以毫不畏懼地依賴它們。

[我忽略了你的第二個問題。請將其移到一個新的問題,所以我們可以單獨回答。]

1

業務邏輯在於接收機(大多數邏輯)和的ConcreteCommand(一些邏輯)班。

客戶調用祈求 =>祈求調用的ConcreteCommand =>的ConcreteCommand呼叫接收機方法,它實現抽象命令方法。

優勢:客戶不會受到影響的命令和接收器的變化。 Invoker在客戶端和Receiver之間提供鬆耦合。您可以使用相同的Invoker運行多個命令。

你的理解是對線程前正確的。你可以把的Runnable的贖回混凝土命令/接收器的ExecutorService祈求Runnable接口贖回爲抽象的命令和實現類。我看到ConcreteCommand本身扮演着的角色接收器在簡單的多線程應用程序。

看一看這個問題,以便更好地理解:

Using Command Design pattern

相關問題