CastleJo의 개발일지

Command Pattern

|

개요

커맨드 패턴이란 요청(Command)을 객체의 형태로 캡슐화 하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 메서드 이름, 매개변수, 등 요청에 필요한 정보를 저장, 로깅, 취소할수 있게 고안된 패턴이다.

커맨드 패턴엔 다음과 같은 4가지 용어가 따른다.

  1. 명령(Command)

    수신자의 객체를 가지고 있고 수신자의 메서드를(주로 execute()) 호출한다. 인터페이스로 선언된다.

  2. 수신자(Receiver)

    인터페이스를 구현하며 자신에게 정의된 메서드를 수행한다.

  3. 발동자(Invoker)

    발동자 객체에게는 여러 명령을 가질 수 있으며 발동하게 한다.

  4. 클라이언트(Client)

    어느 시점에서 어떤 명령을 수행할 지 결정한다.

구현


//Command
public interface Command{
    void execute();
}

//Receiver
public class MouseDown extends Command{
    @Override
    void execute(){
        //something~
    }
}
public class MouseUp extends Command{
    @Override
    void execute(){
        //something~
    }
}
public class MouseOver extends Command{
    @Override
    void execute(){
        //something~
    }
}

//Invoker
public class CmdStack{
    Command[] cmds;

    void add(Command c){
        cmds.append(c);
    }

    void action(){
        for (c : cmds){
            c.execute();
        }
    }
    ...   
}

//Client
public class CmdTest{
    public CmdTest(){
        CmdStack c = new CmdStack();

        c.add(new MouseDown());
        c.add(new MouseUp());
        c.add(new MouseOver());
        c.add(new MouseDown());
        c.add(new MouseUp());

        c.action();
    }
}

간단하게 구현해봤다.