기술나눔

명령 패턴 및 해당 응용 프로그램 살펴보기

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

명령 모드

명령 모드 요청을 요청과 관련된 모든 정보를 포함하는 별도의 개체로 변환하는 동작 디자인 패턴입니다. 이 변환을 통해 다양한 요청, 지연 또는 대기열 요청을 기반으로 메서드를 매개변수화하고 실행 취소할 수 있는 작업을 구현할 수 있습니다.

명령 모드 구조

여기에 이미지 설명을 삽입하세요.

  1. 보내는 사람 (발신자) - "호출자"라고도 알려진 클래스는 요청 초기화를 담당하며 명령 개체에 대한 참조를 저장하기 위한 멤버 변수를 포함해야 합니다. 발신자는 수신자에게 직접 요청을 보내지 않고 명령을 트리거합니다. 송신자는 명령 객체를 생성할 책임이 없습니다. 일반적으로 생성자를 통해 클라이언트로부터 미리 생성된 명령을 얻습니다.
  2. 주문하다(명령) 인터페이스는 일반적으로 명령을 실행하는 메서드만 선언합니다.
  3. 특정 주문 (구체적 명령)은 다양한 유형의 요청을 구현합니다. 특정 명령 자체는 작업을 완료하지 않지만 호출을 비즈니스 논리 개체에 위임합니다. 그러나 코드를 단순화하기 위해 이러한 클래스를 병합할 수 있습니다. 객체의 실행 메소드를 전달받기 위해 필요한 파라미터를 특정 명령어의 멤버 변수로 선언할 수 있습니다. 명령 개체를 변경할 수 없도록 만들고 생성자를 통해서만 이러한 멤버 변수의 초기화를 허용할 수 있습니다.
  4. 수화기 (수신자) 클래스에는 비즈니스 로직의 일부가 포함되어 있습니다. 거의 모든 개체가 수신기 역할을 할 수 있습니다. 대부분의 명령은 요청을 수신자에게 전달하는 방법에 대한 세부 사항만 처리하며 수신자는 실제 작업을 직접 수행합니다.
  5. 고객 (클라이언트)는 특정 명령 개체를 생성하고 구성합니다. 클라이언트는 수신자 엔터티를 포함한 모든 요청 매개 변수를 명령 생성자에 전달해야 합니다. 그런 다음 생성된 명령은 한 명 이상의 보낸 사람과 연결될 수 있습니다.

명령 모드의 공통 코드:

//抽象接收者
public abstract class Receiver{
	public abstract void operation();
}

//具体接收者
public class Recevier1 extends Recevier{
	public void operation(){
		...
	}
}

//通用命令接口
public interface Command{
	void execute();
}

//具体命令类
public class ConcreteCommand1 implements Command{
	private Receiver receiver;
	
	public ConcreteCommand1(Receiver _receiver){
		 this.receiver = _receiver;
	}
	
	public void execute(){
		this.receiver.operation();
	}
}

//调用者类
public class Invoker{
	private Command command;
	
	public void setCommand(Command _command){
		this.command = _command;
	}
	
	public void executeCommand(){
		this.command.execute();
	}
	
}

//主程序类
public class Client{
	public static void main(String[] args){
		//调用者
		Invoker invoker = new Invoker();
		//接收者
		Receiver receiver1 = new Receiver1();
		//定义一个命令
		Command command = new ConcreteCommand1(receiver1);
		
		invoker.setCommand(command);
		invoker.executeCommand();
	}
}