본문 바로가기
슬기로운 자바 개발자 생활/Java more

디자인 패턴 간단한 Command 패턴

by 슬기로운 동네 형 2023. 4. 18.
반응형

개인적으로 필요해서 간단히 패턴을 익히고자 나만의 포스팅.

public interface Command {
    public void execute();
}

범용적인 기능이 구현된 클래스... 추가적인 인자를 받아 더 디테일한 기능을 구현하게 된다.

public class Light {

    String location = "";

    public Light(String location) {
        this.location = location;
    }

    public void on(){
        System.out.println(location + " light is on");
    }

    public void off(){
        System.out.println(location + " light is off");
    }
}

 

 

Ligth 객체의 기능을 호출할 수 있는 명령집합 객체

public class LightOnCommand implements Command{

    Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }
}

동일한 다른 기능

public class LightOffCommand implements Command{

    Light light;

    public LightOffCommand(Light light) {
        this.light = light;
    }

    public void execute() {
        light.off();
    }
}

범용적으로 컨트롤 할수 있는 리모컨 객체

public class SimpleRemoteControl {

    Command slot;

    public SimpleRemoteControl() {
    }

    public void setCommand(Command command) {
        this.slot = command;
    }

    public void buttonWasPressed(){
        slot.execute();
    }
}

마지막으로 실사용.

public class RemoteControlTest {

    public static void main(String[] args) {
        SimpleRemoteControl remote = new SimpleRemoteControl();
        Light light = new Light("거실");

        //각 기능을 세부적으로 정의한 명령클래스 객체를 만든다.
        // 각 명령 클래스에는 Command 기능을 구현했다.
        LightOnCommand lightOn = new LightOnCommand(light);
        LightOffCommand lightOff = new LightOffCommand(light);

        //remote.setCommand(lightOn);
        remote.setCommand(lightOff);
        remote.buttonWasPressed();

    }

}
반응형

댓글