1
A
回答
4
最大的原因是它違反了單一責任原則。客戶參與者和調解者參與者都有各自的責任,並且對其中一個的改變會影響另一個。
0
1)客戶的主要責任是正確實施Invoker,Receiver和Command對象,然後在適當的地點和時間啓動執行程序。
它可以,例如,是這樣的祈求這個
class Client {
...
invoker.executeCommand()
...
}
2)主要職責是在調用特定的順序Command對象的一個或多個命令的方法。
例如,
class Invoker {
...
command.command1();
command.command2();
command.command3();
...
}
讓我們考慮,例如,java.awt.event.KeyListener類。它是按照下面的順序調用三種方法:
keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)
這個監聽器祈求類可能是:正確實例化的EventObject,KeyListener的和KeyInvocation然後
class KeyInvocation {
KeyListener listener;
void invokeKey(EventObject e) {
listener.keyPressed(e);
listener.keyTyped(e);
listener.keyReleased(e);
}
}
與此同時Client類應在適當的執行地點和時間invokeKey方法。
當然,Invoker是命令模式的附加層。 在Command模式更簡單的情況下,我們可以跳過Invoker類並完成客戶端的所有工作。
相關問題
- 1. 命令模式:客戶端和調用者之間的關係
- 2. 設計模式 - 客戶端服務器 - 命令模式
- 3. 在命令模式中初始化命令調用者
- 4. GUI和命令行SVN客戶端
- 5. Eclipse和SVN命令行客戶端
- 6. 使用MySQL命令行客戶端
- 7. setTimeout客戶端使用命令
- 8. 用PHP執行Asterisk客戶端命令
- 9. Cassandra客戶端命令行客戶端顯示點
- 10. 爲什麼客戶端在Command模式中沒有引用調用者?
- 11. 客戶端和令牌?
- 12. 如何在UNet(Unity)中的客戶端調用[命令]
- 13. 如何在WinForms客戶端應用程序中使用命令模式?
- 14. jQuery和客戶端api模式/框架
- 15. Java Socket客戶端模式
- 16. Mongodb c#客戶端模式
- 17. ASP.net客戶端ID模式
- 18. 從JAVA客戶端執行PMCMD命令
- 19. CQRS客戶端命令管理
- 20. node redis客戶端HSET命令失敗
- 21. 命令不從客戶端觸發
- 22. 尋找命令行ftp客戶端(linux)
- 23. Netbeans CVS客戶端的命令
- 24. Node.js TCP客戶端命令/響應
- 25. 從MySQL客戶端執行shell命令?
- 26. Svn客戶端命令行窗口
- 27. 命令行JMX客戶端設置值
- 28. 支持命令行的VOIP客戶端
- 29. 遠程Informix 11.5命令行客戶端
- 30. 命令模式如何用不同的請求參數化客戶端?
[Command Design Pattern - Is Invoker Optional?]的可能的副本(http://stackoverflow.com/questions/12879609/command-design-pattern-is-invoker-optional)。這是更早,但其他有更多的信息。 – outis 2015-07-18 21:03:18