ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] Command Pattern
    Programming/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
Designed by Tistory.