-
[Design Pattern] Command PatternProgramming/DesignPattern 2020. 12. 17. 18:02
커맨드 패턴(Command Pattern)
커먼드 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에, 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다.
커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자 클래스와 실제 기능을 실행하는 수신자 클래스 사이의 의존성을 제거한다.
따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 해준다.
- Command : 실행될 기능에 대한 인터페이스. 실행될 기능은 execute 메서드로 선언함.
- ConcreteCommand: 실제로 실행되는 기능을 구현. 즉, Command라는 인터페이스를 구현함.
- LampOnCommand , AlarmOnCommand
- Invoker: 기능 실행을 요청하는 소출자 클래스
- Button
- Receiver: ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스.
- 즉, ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스
- Lamp, Alarm
package design.CommandPattern.button; interface Command { public abstract void execute(); } class Button { private Command command; public Button(Command command){ setCommand(command); } public void setCommand(Command newCommand){ this.command = newCommand; } public void pressed(){ //버튼을 클릭하면, Command의 execute 메서드 호출. command.execute(); } } class Lamp { public void turnOn(){ System.out.println("Lamp On"); } } class LampOnCommand implements Command{ private Lamp lamp; public LampOnCommand(Lamp lamp){ this.lamp = lamp; } @Override public void execute() { lamp.turnOn(); } } class Alarm { public void start(){ System.out.println("Alarming..."); } } class AlarmOnCommand implements Command{ private Alarm alarm; public AlarmOnCommand(Alarm alarm){ this.alarm = alarm; } @Override public void execute() { alarm.start(); } } public class Client { public static void main(String[] args) { Lamp lamp = new Lamp(); Command lampOnCommand = new LampOnCommand(lamp); Button button1 = new Button(lampOnCommand); button1.pressed(); Alarm alarm = new Alarm(); Command alarmOnCommand = new AlarmOnCommand(alarm); Button button2 = new Button(alarmOnCommand); button2.pressed(); button2.setCommand(lampOnCommand); button2.pressed(); } }
*Command : 컴퓨터로 시스템이나 장치에 대하여 특정 기능의 실행을 지시하기 위한 정보나 신호.
'Programming > DesignPattern' 카테고리의 다른 글
[Design Pattern] Observer Pattern (0) 2020.12.26 [Design Pattern] State Pattern (0) 2020.12.15 [Design Pattern] Singleton Pattern (1) 2020.12.14 [Design Pattern] Strategy Pattern (0) 2020.12.10