본문 바로가기
프로그래밍/디자인패턴

자바 커맨드(Command) 패턴

by 방구석개발자 2022. 12. 12.
반응형

설명

커맨드 패턴은 요청을 객체의 형태로 캡슐화하여 사용하는 패턴입니다.

객체의 행동을 변화시키는 요구나 명령을 클래스로 표현하는 패턴입니다.

왜 사용해야 하는지

다양한 요청을 안전하게 처리할 수 있다.

각각의 커맨드들은 특정 객체에 의존하지 않도록 만들어지므로 재활용성이 매우 높습니다.

예시

저희는 이제 리모컨을 만들어 보겠습니다.

리모컨에는 4개의 버튼과 4가지 기능이 있는데요.

우선 커맨드를 인터페이스로 정의해보겠습니다.

public interface ButtonCommand {

    public void run();
}

그다음 4가지 버튼의 기능을 만들어 보겠습니다.

public class PowerOnButton implements ButtonCommand {
    @Override
    public void run() {
        System.out.println("파워를 킴");
    }
}

public class PowerOffButton implements ButtonCommand{
    @Override
    public void run() {
        System.out.println("파워를 끔");
    }
}

public class ChannelUpButton implements ButtonCommand{
    @Override
    public void run() {
        System.out.println("채널 위로 올림");
    }
}

public class ChannelDownButton implements ButtonCommand{
    @Override
    public void run() {
        System.out.println("채널 아래로 내림");
    }
}

이제 클라이언트에서 리모컨을 실행해보겠습니다.

public class Client {

    public static void main(String[] args) {
        Remote 리모컨 = new Remote();
        ButtonCommand powerOnButton = new PowerOnButton();
        ButtonCommand powerOffButton = new PowerOffButton();
        ButtonCommand channelUpButton = new ChannelUpButton();
        ButtonCommand channelDownButton = new ChannelDownButton();

        리모컨.setCommand(powerOnButton);
        리모컨.buttonPress();

        리모컨.setCommand(channelUpButton);
        리모컨.buttonPress();

        리모컨.setCommand(channelDownButton);
        리모컨.buttonPress();

        리모컨.setCommand(powerOffButton);
        리모컨.buttonPress();
    }
}

이처럼 행위를 캡슐화하여 사용하는것이 커맨드 패턴입니다.

Java 예시

스케줄러, 스레드 풀, 작업 큐 등등이 있습니다.

Runnable (Java Platform SE 8 )

 

Runnable (Java Platform SE 8 )

The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run. This interface is designed to provide a common protocol for objects that wish to e

docs.oracle.com

 

반응형

'프로그래밍 > 디자인패턴' 카테고리의 다른 글

자바 데커레이터(Decorator) 패턴  (0) 2022.11.15
자바 전략 패턴  (0) 2022.11.03
자바 프록시 패턴  (0) 2022.11.01
자바 빌더 패턴  (0) 2022.10.30
자바 팩토리 메서드 패턴  (0) 2022.10.25

댓글