본문 바로가기

Unity/Unity 스파르타

15주차 - 커맨드 패턴,

728x90

커맨드 패턴에 대해 알아보기.

커맨드 패턴은 요청을 객체로 캡슐화하여 요청과 수신자 사이의 결합을 느슨하게 만드는 디자인 패턴

사전 용어 정리 하기

Command 패턴을 보기 전에 몇가지 용어를 정리하고 가보자.

  • Client — 커맨드 객체를 생성, 인보커 객체를 통해 리시버 객체 에게 할 행동을 전달함
  • Invoker — 커맨드를 저장함 리시버 객체 에게 행동을 전달하는 객체 (ex 버튼 이나 단축키의 역할)
  • Command — 리시버 객체의 정보 + 행동이 들어 있는 객체
  • Receiver — 행동을 하는 객체 
  • setCommand() — 인보커 객체에 정의 되어 있는 메서드, 클라이언트가 실행한다. 이 메서드가 호출되면, 커맨드 객체가 같이 호출 된다.
  • execute() — 해당 호출로 커멘드 객체에 있는 일련의 과정들이 수행 된다. 

 

 

Interface Command 

Excute(), Undo();

 

public class Invoker { 

private readonly Stack<ICommand> _undoStack = new Stack<ICommand();

public void AddCommand(ICommand command) { _undoStack.Push(command); }

public void Undo() { if (_undoStack.Any()) { var command = _undoStack.Pop(); command.Undo(); } } }

 

TileDrawCommand(TileBase,Vector2int)

this.base = TileBase

this.position = Vector2int

Excute(){TileMap.SetTile(TileBase,Vector2int};

Undo(){TileMap.SetTIle(null,Vector2int} 

 

var tdc = new TileDrawCommand(TileBase, Vector2Int);

var invoker = new Invoker();

 invoker.AddCommand(tdc);

invoker.Undo();

728x90