요청 호출과 처리를 분리하는 패턴 중 하나이고, 중간에 Command
객체를 사용한다
요청을 처리하는 방법이 바뀌어도, 호출자의 코드는 변경되지 않는다. 요청을 캡슐화
하여 전달한다.
public class Button {
private Light light;
public Button(Light light) {
this.light = light;
}
public void press() {
light.on();
}
public static void main(String[] args) {
Button button = new Button(new Light());
button.press();
button.press();
button.press();
button.press();
}
}
public class MyApp {
private Light light;
public Button(Light light) {
this.light = light;
}
public void press() {
light.on();
}
}
public interface Command {
void execute();
}
public class Button {
private Command command;
public Button (Command command) {
this.command = command;
}
public void press() {
command.execute();
}
public static void main(String[] args) {
Button button = new Button({
@Override
public void execute() {
}
});
button.press();
button.press();
}
}
public class LightOnCommand implements Command {
private Light light;
@Override
public void execute() {
light.on();
}
}
Button
의 코드는 변경되지 않는다. 변경 사항이 있을 경우 Command
의 내용만 변경되어 범위가 축소되는 효과를 볼 수 있다.
insert query
를 실행하는데 필요한 모든 정보를 가지는 Command Object
이다.
public void add(Command command) {
SimpleJdbcInsert insert = new SimpleJdbcInsert(dataSource)
.withTableName("command")
.usingGenerateKeyColumns("idx");
}
JDBC의 프로시저
를 호출하는데 필요한 일종의 커맨드 객체이다.