コマンドパターン:クライアントとの発動
-
23-08-2019 - |
質問
コマンドパターンでます:
なぜクライアントの参加者は、呼び出し元の参加者と同じクラスではないでしょうか?可能なシナリオは、クライアントの参加者と呼び出しの参加者が同じクラスにすることができるときがありますか?
解決
最大の理由は、それが、単一の信頼と責任感の原則に違反していることです。クライアントの参加者と実行者のparticpantは、両方の個々のresponsibiltiesを持っており、1への変更は、他に影響を与えます。
他のヒント
1)クライアントの主な責任は、実行、受信機とコマンドオブジェクトの適切なインスタンス化にあり、その後、適切な場所と時間に実行手順を開始します。
これは、例えば、次のようなものかもしれない。
class Client {
...
invoker.executeCommand()
...
}
2)インボーカの主な責任は、特定の順序でコマンドオブジェクトの1つ以上のコマンドのメソッドを呼び出すことである。
たとえば、
class Invoker {
...
command.command1();
command.command2();
command.command3();
...
}
のは、例えば、java.awt.event.KeyListenerのクラスを考えてみましょう。これは、次の順序で呼び出された3つの方法があります:
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とは、適切な場所と時間invokeKey方法で実行する必要があります。
もちろん、呼び出し元のは、Commandパターンの追加の層です。 Commandパターンの単純なケースでは、すべての実行者のクラスをスキップすることができますし、クライアントのいずれかですべての作業を行う。
所属していません StackOverflow