어떤 패턴인가?
- 객체 상태의 스냅샷을 만들어 나중에 복원할 수 있도록 해주는 패턴입니다.
어느 상황에 쓰일 수 있는 가?
- 비주얼 노벨 게임에서 게임 기록 혹은 이전 상태 복원
- 뒤로 가기
- 플레이어의 진행 상황
샘플 코드
using System;
using System.Collections.Generic;
public class Memento
{
public string State { get; private set; }
public Memento(string state)
{
this.State = state;
}
}
public class Originator
{
public string State { get; set; }
public Memento SaveStateToMemento()
{
return new Memento(State);
}
public void GetStateFromMemento(Memento memento)
{
State = memento.State;
}
}
public class Caretaker
{
private List<Memento> mementoList = new List<Memento>();
public void Add(Memento state)
{
mementoList.Add(state);
}
public Memento Get(int index)
{
return mementoList[index];
}
}
class Program
{
static void Main(string[] args)
{
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.State = "상태 #1";
originator.State = "상태 #2";
caretaker.Add(originator.SaveStateToMemento());
originator.State = "상태 #3";
caretaker.Add(originator.SaveStateToMemento());
originator.State = "상태 #4";
Console.WriteLine("Current State: " + originator.State);
originator.GetStateFromMemento(caretaker.Get(0));
Console.WriteLine("First saved State: " + originator.State);
originator.GetStateFromMemento(caretaker.Get(1));
Console.WriteLine("Second saved State: " + originator.State);
}
}