문제

명령 패턴에서 :

고객 참가자가 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에서 모든 작업을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top