명령 패턴 : 클라이언트 및 인비커
-
23-08-2019 - |
문제
명령 패턴에서 :
고객 참가자가 Invoker 참가자와 같은 클래스가되어서는 안됩니까? 클라이언트 참가자와 Invoker 참가자가 동일한 클래스가 될 수있는 시나리오가 있습니까?
해결책
가장 큰 이유는 단일 책임 원칙을 위반하기 때문입니다. 클라이언트 참가자와 Invoker Particpant는 모두 개별적인 책임을지고 하나에 대한 변경은 다른 사람에게 영향을 미칩니다.
다른 팁
1) 클라이언트에 대한 주요 책임은 호반, 수신기 및 명령 개체의 적절한 시동과 적절한 장소와 시간에 실행 절차를 시작하는 것입니다.
예를 들어 이와 같은 것일 수 있습니다.
class Client {
...
invoker.executeCommand()
...
}
2) Invoker의 주요 책임은 특정 순서로 명령 개체의 하나 이상의 명령-방법을 호출하는 것입니다.
예를 들어,
class Invoker {
...
command.command1();
command.command2();
command.command3();
...
}
예를 들어 java.awt.event.keylistener 클래스를 고려해 봅시다. 다음 순서로 호출되는 세 가지 방법이 있습니다.
keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)
이 청취자를위한 Invoker 클래스는 다음과 같습니다.
class KeyInvocation {
KeyListener listener;
void invokeKey(EventObject e) {
listener.keyPressed(e);
listener.keyTyped(e);
listener.keyReleased(e);
}
}
그 동안 클라이언트 클래스는 EventObject, Keylistener 및 KeyInvocation을 적절히 인스틱 한 다음 적절한 장소와 시간 Invokekey 메소드에서 실행해야합니다.
물론 Invoker는 추가 명령 패턴 레이어입니다. 더 간단한 명령 패턴의 경우 우리는 Invoker 클래스를 전혀 건너 뛰고 클라이언트 1에서 모든 작업을 수행 할 수 있습니다.
제휴하지 않습니다 StackOverflow