https://refactoring.guru/design-patterns/memento
객체의 상태를 특정 시점에 백업하고 이를 저장해 놓는다.
원하는 때에 원하는 상태로 객체의 백업해 놓은 데이터를 이용해 되돌아 간다.
예제
- Puzzle 게임의 TimeMachine 같은 기능을 구현 하고자 할 때.
- 툴의 버튼 등으로 인한 상태 변화를 UNDO 하고자 할 때.
예제 코드
더보기
public interface IMemento
{
IMemento BackUp();
void Restore(IMemento mem);
}
public class MiniGameStates : IMemento
{
// some data.
//
public IMemento BackUp()
{
MiniGameStates curState = new MiniGameStates();
// copy.
return curState;
}
public void Restore(IMemento oldState)
{}
}
public class MiniGame
{
IMemento states;
List<IMemento> gameStates = new List<IMemento>();
public void SetMemento(IMemento mento) { states = mento; }
public void Exe()
{
// Do some.
Console.WriteLine("Some action!");
//
gameStates.Add( states.BackUp() );
}
public void Undo()
{
states.Restore( gameStates[gameStates.Count - 1] );
gameStates.RemoveAt(gameStates.Count - 1 );
}
}
internal class MementoDemo
{
public void Run()
{
MiniGame mini = new MiniGame();
mini.SetMemento(new MiniGameStates());
mini.Exe();
mini.Exe();
mini.Undo();
}
}
'Work & Programming > System Design' 카테고리의 다른 글
[Behavioral Pattern] - State (0) | 2024.05.16 |
---|---|
[Behavioral Pattern] - Observer (0) | 2024.05.16 |
[Behavioral Pattern] - Command (0) | 2024.05.16 |
[Behavioral Pattern] - Chain Of Responsibility (0) | 2024.05.16 |
[Structural Pattern] - Proxy (0) | 2024.05.15 |