수색…


Java의 명령 패턴 예제

위키 피 디아 정의 :

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

dofactory의 UML 다이어그램 :

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

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

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

이렇게하면 명령 패턴에 따라 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. OnCommandConcreteCommand 이며, execute() 메소드를 구현합니다.
  3. 수신기 는 기본 클래스입니다.
  4. TVDVDPlayer 는 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