Command Pattern
01 May 2021 | DesignPattern개요
커맨드 패턴이란 요청(Command)을 객체의 형태로 캡슐화 하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 메서드 이름, 매개변수, 등 요청에 필요한 정보를 저장, 로깅, 취소할수 있게 고안된 패턴이다.
커맨드 패턴엔 다음과 같은 4가지 용어가 따른다.
- 명령(Command)
수신자의 객체를 가지고 있고 수신자의 메서드를(주로
execute()
) 호출한다. 인터페이스로 선언된다. - 수신자(Receiver)
인터페이스를 구현하며 자신에게 정의된 메서드를 수행한다.
- 발동자(Invoker)
발동자 객체에게는 여러 명령을 가질 수 있으며 발동하게 한다.
- 클라이언트(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();
}
}
간단하게 구현해봤다.