반응형

 

 

 

 

 

command 패턴이란?

 

요청과 이 요청을 처리할 객체를 중계하기 위한 클래스 상속구조를 말한다

 

 

여라가지의 처리할 명령을 'A' 에서 요청할 경우 'A'쪽의 명령들을

 

Abstract Base class 기반으로 구성하여 각 명령에 대해 처리할 관련있는 클래스들끼리 참조 또는 할당하여 하나의 객체로 구성하여

 

map 등으로 명령과 클래스를 같이 갖고 있는 형태로 만들어 놓은후

 

B 쪽에서 이것을 처리할때

 

A 에서 만든 상속구조처럼 묶어 처리하는 패턴

 

오고 가는 것은 map 의 value 가 오고 가지만 이 value 에 대한 명령 처리를

 

B쪽에서는 해당 처리해야 할 서브 클래스에 대한 해당 명렬을 처리할 클래스를 추출해 낼 수 있음으로

 

이 둘의 연결 구조를 보다 각각의 지역적으로 분할된 형태로 처리 할 수 있다

 

 

 

 

2. callback 버튼 실행 명령 함수에 이를 대입할 수 있다

  C 함수는 괜찮은데 , 멤버 함수를 callback 으로 부를 경우 문제가 될 수 있는데 이때 사용 할 수 있다

 

3. redo, undo 에 적용 하기 쉽다

 

  각 명령에 대해서 동일한 인터페이스로 처리 가능

  즉 동일한 데이터 타입으로 명령을 처리 할 수 있고 필요 한 클래스들만 있으면 된다

  => 동일한 데이터만 핸들링 하면 된다

 

 undo/redo 의 순서는 memento 패턴으로 해결 하면 된다

 

 

 

또한 undo/redo 의 객체 상태 저장은 prototype패턴 or 바뀐부분을 저장하는 방법 memento 패턴을 활용(상태 값을 저장해 놓는 형태)

 

 

*undo/redo 는 연산을 했던걸 다시 역으로 하는 것보단, 상태값으로 그때의 상태를 제연하는 것이 좋다

 

 

4. protocal 과 같은 명령에 대한 처리에도 유용하다

 

5. makefunctor( (functor1*), ai, show );   <= 표기 정확하지 않음 대략적으로 표기

같은 것 또한 전역 함수나, 멤버함수를 동일한 형태로써 두개를 수행 할 수 있는 것과 같은 것도 command 패턴의 유형과 개념상 비슷하다고 볼 수 있다


 

 

명령종류의 자체가 많아 지면 command 들의 상위인 command 클래스가 필요한데 이렇게 명령의 종류가 많아지면

 

composite 패턴과 연동하여 한번에 처리 할 수 있게 한다

 

동일한 레벨을 묶고 있는게 composite 이니깐 동일하게 묶고 있는것에 대해 전체를  돌면서 다 실행하는 virtual 함수 실행

 


 

 

 

명령의 종류에 대해 나뉘어지는 형태이므로

 

다른 유사 명령과 교체하여 실행을 다르게 설정 할 수 도 있다


 

또한 복합적인 명령을 수행해야 하는 경우

 

서브 command 클래스를 만들 필요 없이

 

중간에 macrocommand 클래스를 만들어 두어 이 클래스에서 명령을 조합해 실행하는 클래스를 두는 것이 효과적이다

 

 

 


 

 

 

macrocommand 클래스를 활용할 경우 스크립트의 작업형태도 처리 가능하다

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

execute( ) 의 수행함수에서 인자를 줄려면 다 주던지 안주려면 다 안주던지 해야 한다

함수에 인자가 들어가면 인자타입이 다 틀려지고 부르는 쪽도 맞춰 틀려져야 하기 때문에 처리가 복잡해 진다

 

각 명령에 대해 한 클래스들이 명령을 처리할 클래스들을 생성자의 초기 값으로 넘겨주게 된다

이때의 생성자 초기 값은 상관 없음으로 명령을 수행할 execute() 함수만 불러주면 되기 때문

 

 

반응형

+ Recent posts