프로그램 아키텍쳐/디자인패턴

커맨드 패턴 ( Command pattern )

본클라쓰 2009. 1. 6. 10:54

 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며,매개변수를 써서 여러 가지 다른 요구 사항을 집어 넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능하다. 커맨드 패턴은 메소드 호출을 캡슐화하여 한 차운 높은 단계의 캡슐화를 가능하게 한다. 

 

 커맨드 패턴은 특정 행위를 받는 행위와 연결함으로써 요구 사항을 캡슐화시키는 것이다. 즉, 내부적인 실행과정은 한 객체에 집어넣고 실행 메소드만 외부로 공개하는 방법이다. 

   

우선, 커맨드 인터페이스를 구현한다.  

 

public interface Command {


 public void execute();               /* 실행 메소드를 구현하게 선언함 */


}

 

실행할 내용을 가지고 있는 A클래스를 구현한다.

public class A { 

 

    /* on 작동하는 메소드 구현 */
    public void on() {             
        System.out.println("A클래스를 on시킵니다");
    }
 
    public void off(){             /* off 작동하는 메소드 구현 */
        System.out.println("A클래스를 off시킵니다.");
    }
}

 

실행 클래스를 조정하는 클래스를 구현한다. 

 

public class Control {


    Command slot;               /* 커맨드 클래스 인스턴스를 가짐 */
 
    public Control(){}
 
    public void setCommand(Command command){         /* set커맨드 메소드 */
        slot = command;
    }
 
    public void action(){        /* execute()메소드를 실핼 시크는 메소드*/
        slot.execute();
    }
}

 

A클래스를 실행하는 클래스를 구현한다. 이 때 커맨드 인터페이스를 구현한다. 

 

public class AonCommand implements Command {


    A a;
 
    public AonCommand(A a) {
        this.a = a;
    }
 
    public void execute() {
        a.on();
    }
}

 

 

실제 시뮬레이터 클래스 구현 

 

public class Simulator {


    public static void main(String[] args) {


        Control remote = new Control();
        A a = new A();
        AonCommand aon = new AonCommand(a);
  
        remote.setCommand(aon);
        remote.action();

    }
}

 

이런 방식으로 커맨트 패턴은 구현된다.