Command Pattern

From YYpBD's MediaWiki

Jump to: navigation, search

목차

개요

Client

ConcreteCommmand를 생성하고 Receiver를 설정한다.

Receiver

요구 사항을 수행하기 위해 어떤 일을 처리해야 하는지 알고 있는 객체이다.

action 메소드를 지원해야 한다.

ConcreteCommand

Receiver의 action을 실행한다.

execute와 undo 메소드를 지원해야 한다.

Invoker

명령이 들어 있으며 execute메소드를 호출해서 커맨드 객체에게 특정 작업을 수행하라고 요구한다.

예제

Delphi

Java


public class TReceiver {
	public void DoGreatWork() {}
	public void DoCancelWork() {}
}

public interface TCommand {
	public void execute();
	public void undo();
}

public class TConcreteCommand implements TCommand {
	private TReceiver FReceiver;
	
	public TConcreteCommand( TReceiver AReceiver ) {
		this.FReceiver = AReceiver;
	}
	
	public void execute() {
		FReceiver.DoGreatWork();
	}
	
	public void undo() {
		FReceiver.DoCancelWork();
	}
}

public class TInvoker {
	TCommand FCommand;
	TCommand FUndoCommand;
	
	public TInvoker() {
		FUndoCommand = null;
	}
	
	public void setCommand( TCommand ACommand ) {
		FCommand = ACommand;
	}
	
	public void DoWork() {
		FCommand.execute();
		FUndoCommand = FCommand;
	}
	
	public void CancelWork() {
		if( FUndoCommand != null ) {
			FUndoCommand.undo();
		}
	}
}

	TInvoker Invoker = new TInvoker();
	TReceiver Receiver = new TReceiver;
	TConcreteCommand ConcreteCommand = new TConcreteCommand(Receiver);
	
	Invoker.setCommand( ConcreteCommand );
	Invoker.DoWork();
	Invoker.CancelWork();

맞춤검색