题
在命令模式:
为什么不应该客户参与者是相同的类作为调用参与者?是否有可能出现的情况,当客户端参与者和调用者的参与者可以是相同的类?
解决方案
最大的原因是,它违反了单个责任心原理。客户参与者和调用程序particpant都有个别responsibilties和改变到一个将影响其他。
其他提示
1),用于客户端的主要职责是调用器,接收器的适当instanciation和在适当的时间和地点Command对象,然后开始执行程序。
它可以,例如,是这样的
class Client {
...
invoker.executeCommand()
...
}
2),用于调用程序主要责任是调用在特定的顺序命令对象中的一个或多个命令的方法。
例如,
class Invoker {
...
command.command1();
command.command2();
command.command3();
...
}
让我们考虑一下,例如,java.awt.event.KeyListener类。它具有在下面的顺序调用三种方法:
keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)
此侦听调用器类可以是:
class KeyInvocation {
KeyListener listener;
void invokeKey(EventObject e) {
listener.keyPressed(e);
listener.keyTyped(e);
listener.keyReleased(e);
}
}
适当的实例化的EventObject,的KeyListener和KeyInvocation然后与此同时Client类应该执行在适当的位置和时间invokeKey方法。
当然调用者是命令模式的一个附加层。 在命令模式简单的情况下,我们可以在任何跳过祈求类,并做所有的工作在客户端之一。
不隶属于 StackOverflow