기본 의도는 Command 패턴은 실제 소비자 (CommandHandler)에서 일부 클래스 (구체적인 명령 클래스)의 기본 (가장 중요한) 작업을 분리합니다.
그래서 우리는 다형성을 기반으로 한 작업을하고 있습니다. void excecute(){}
이라는 메서드가있는 클래스의 클래스를 정의하므로 메서드 매개 변수 나 반환 형식에 강하지는 않습니다. 그래서 구체적인 Command 클래스는 그 메소드 내에서 클래스 특정 구현을 구현할 수 있으며, CommandHandler는 정확하게 그 concrete 클래스가 (Command 클래스의 인스턴스이면 충분 함) 알 필요없이 someCommandObject.execute();
을 자유롭게 호출 할 수 있습니다. 따라서 호출과 구현은 거의 분리되어 있습니다. 나중에 void execute(){}
을 구현하는 또 다른 구체적인 Command 클래스를 소개 할 수 있습니다. CommandHandler는 someCommandObject.execute();
을 호출하여이를 호출 할 수 있습니다. 그것이 커맨드 패턴의 아름다움입니다.
자바 스레드에서는 Thread.run()
이고 C# 스레드에서는 Task.Run()
과 똑같은 내용입니다.
고객님의 편의에 따라 수신기을 사용할 수 있지만 Command 패턴의 큰 그림에서 조금 벗어났습니다. 귀하의 계산기 예제에서, 수신자을 가지고있는 것이 합당합니다. 왜냐하면 모든 concrete Command 클래스가 기본 조작 (execute()
)을 실행하기 위해이를 참조 할 수 있기 때문입니다.
수신자가 사용되지 않은 here과 there에서 몇 가지 예를 볼 수 있습니다. 그것은 합리적인 곳에 수신기를 사용하는 것 이상으로 완벽합니다. 그러나 커맨드 패턴의 실제 거래로 그 것을 혼동하지 마십시오.:))
? 개별 명령 처리기 또는 ...? – kayess
개별 명령이 있습니다. 그것들은 개별 과제입니다. 나는 어떻게 '수신기'가 그림에 잘 들어 맞는지 모르겠습니다. – Skadoosh
이전에 언급 한 내용에 따르면 명령 처리자 (귀하의 말로 표현 된 리시버)가 어떻게 작동하는지 알 수 없습니까? 또는 명령 처리기가 제기 한 이벤트를 참조하고 있습니까? – kayess