수색…


Java의 명령 패턴 예제

위키 피 디아 정의 :

명령 패턴은 동작을 수행하거나 나중에 이벤트를 트리거하는 데 필요한 모든 정보를 캡슐화하는 데 객체를 사용하는 동작 설계 패턴입니다

dofactory의 UML 다이어그램 :

여기에 이미지 설명을 입력하십시오.

기본 구성 요소 및 워크 플로 :

  1. Command 은 execute() 와 같은 추상 명령 인터페이스를 선언합니다.
  2. Receiver 는 특정 명령을 실행하는 방법을 알고 있습니다.
  3. Invoker 는 실행 Invoker ConcreteCommand 를 보유하고 있습니다.
  4. Client 가 ConcreteCommand 만들고 Receiver 할당합니다.
  5. ConcreteCommand 는 Command 과 Receiver 간의 바인딩을 정의합니다.

이렇게하면 명령 패턴에 따라 Sender (클라이언트)가 Receiver 에서 Invoker로 분리 됩니다. 호출자는 명령이 실행하고 명령 수신기가 특정 작업을 실행하기 위해 호출 할 수있는 알고있는 완전한 지식을 가지고있다.

코드 스 니펫 :

interface Command {
    void execute();
}
class Receiver {
    public void switchOn(){
        System.out.println("Switch on from:"+this.getClass().getSimpleName());
    }
}
class OnCommand implements Command{
    private Receiver receiver;

    public OnCommand(Receiver receiver){
        this.receiver = receiver;
    }
    public void execute(){
        receiver.switchOn();
    }
}
class Invoker {
    private Command command;
  
    public Invoker(Command command){
        this.command = command;
    }
    public void execute(){
        this.command.execute();
    }
}

class TV extends Receiver{
    
    public String toString(){
        return this.getClass().getSimpleName();
    }
}
class DVDPlayer extends Receiver{
    
    public String toString(){
        return this.getClass().getSimpleName();
    }
}

public class CommandDemoEx{
    public static void main(String args[]){
        // On command for TV with same invoker 
        Receiver receiver = new TV();
        Command onCommand = new OnCommand(receiver);
        Invoker invoker = new Invoker(onCommand);
        invoker.execute();
        
        // On command for DVDPlayer with same invoker 
        receiver = new DVDPlayer();
        onCommand = new OnCommand(receiver);
        invoker = new Invoker(onCommand);
        invoker.execute();            
    }
}

산출:

Switch on from:TV
Switch on from:DVDPlayer

설명:

이 예에서,

  1. 명령 인터페이스는 execute() 메소드를 정의합니다.
  2. OnCommand 는 ConcreteCommand 이며, execute() 메소드를 구현합니다.
  3. 수신기 는 기본 클래스입니다.
  4. TV 와 DVDPlayer 는 OnCommand와 같이 ConcreteCommand에 전달되는 Receivers의 두 가지 유형입니다.
  5. 호출자 는 명령을 포함합니다. Sender와 Receiver의 연결을 끊는 열쇠입니다.
  6. 호출자 는 Receiver (TV)를 호출하여이 명령을 실행하는 OnCommand ->를받습니다.

Invoker를 사용하여 TV 및 DVDPlayer를 켤 수 있습니다. 이 프로그램을 확장하면 TV와 DVD 플레이어도 함께 꺼집니다.

주요 사용 사례 :

  1. 콜백 메커니즘을 구현하려면
  2. 실행 취소 및 다시 실행 기능을 구현하려면
  3. 명령 기록 유지


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow