Memento for restore state
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GoFMemento
{
class CareTaker
{
static void Main(string[] args)
{
List savedStates = new List();
Originator originator = new Originator();
originator.set("State1");
originator.set("State2");
savedStates.Add(originator.saveToMemento());
originator.set("State3");
savedStates.Add(originator.saveToMemento());
originator.set("State4");
originator.restoreFromMemento(savedStates[1]);
}
}
class Originator
{
private string state;
public void set (string state)
{
this.state = state;
Console.WriteLine("Originator: Setting state to " + state);
}
public Memento saveToMemento() // createMemento()
{
Console.WriteLine("Originator: Saving to Memento.");
return new GoFMemento.Originator.Memento(this.state);
// 예제에서는 string 이 쓰였는데, 실제로는 object 가 많이 쓰이니 serialize deserilize 를 이용하면 더 좋은 구현이 될 수 있다.
}
public void restoreFromMemento (Memento memento) // restore (Memento)
{
this.state = memento.getSavedState();
Console.WriteLine("Originator: State after restoring from Memento: " + state);
}
public sealed class Memento
{
private string state;
public Memento (string stateToSave) // setState()
{
state = stateToSave;
}
public string getSavedState() // getState()
{
return state;
}
}
}
}