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
'Unity > Unity 스파르타' 카테고리의 다른 글
16주차 - 인게임용 커스텀 에디터(타일),버튼 색 스크립트로 통제(ColorBlock) (0) | 2024.04.03 |
---|---|
15주차 - 커맨드 패턴 활용(클래스 다이어그램) (0) | 2024.03.29 |
15주차 - 화염 방사기 기믹 만들기 (0) | 2024.03.27 |
15주차 - Selection.activeGameObject, EditorApplication.ExecuteMenuItem() (0) | 2024.03.26 |
15주차 - GUI 공부(GUIUtility.GetControlID(),Event,HandleUtility.Repaint()) (0) | 2024.03.25 |