Search Results for '디자인 패턴/2. 명령( Command )'

1 POSTS

  1. 2012.10.23 명령( Command )

명령( Command )

Posted 2012. 10. 23. 18:12

요청 자체를 객체화 하는것. 그리고 서로 다른 요청을 객체화 하여 클라이언트에게

파라미터로 넘겨 줄 수 있게 한다.

명령의 발동과 명령 수행의 분리 패턴하기 때문에 종속성을 제거하여 결합도를 낮출수 있다.

얼마든지 동적으로도 같은 메뉴에 다른 기능을 연결하게 할 수 있다.

명령패턴은 복합체 패턴과 융화되어 매크로 기능을 구현할수있다.



아래 코드는 명령 클래스와 그 서브 클래스를 나타낸 것인데 Execute()라는 매서드를 발동시킴으로써

명령 수행에 대한 일반화를 시켰다. 다른 기능들, 복사하기, 취소하기 등등도 Execute()로 발동된다.

그리고 취소하기 같은 경우, 명령 클래스들에 명령 수행전 명령 히스토리에 해당 명령을 저장하게

함으로써 가능하게 된다. 그 명령 히스토리의 역으로 반대의 명령을 실행하면 취소하기(Undo)가된다.

// 명령 추상 클래스

class Command

{

public:

virtual ~Command();

virtual void Execute() = 0;

protected:

Command();

};


// 문서 열기 클래스

class OpenCommand : public Command

{

public:

OpenCommand( Application*);

virtual void Execute();

protected:

virtual const char* AskFileName();

private:

Application* m_app;

};


// 문서 열기 생성자( 응용프로그램 포인터를 저장 )

OpenCommand::OpenCommand( Application* a )

{

_app = a;

}


// 문서 열기 명령 수행( Document = 응용 프로그램내 문서 클래스 )

void OpenCommand::Execute()

{

const char* name = AskFileName();

if( name != NULL )

{

Document* doc = new Document( name );

_app->Add(doc);

doc->Open();

}

}