public static void Main() { Originator originator = new Originator(); CareTaker careTaker = new CareTaker(); originator.ChangeState(new State("状态一")); originator.ChangeState(new State("状态二")); //存储当前状态 string key = originator.GetState().name; careTaker.AddMemento(key, originator.CreateMemento()); originator.ChangeState(new State("状态三")); //恢复到之前备份的某一状态 originator.RestoreFromMemento(careTaker.GetMemento(key)); Debug.Log("目前状态:" + originator.GetState().name); }
//白箱备忘录 //暴露了备忘录中的状态给任何对象 //public State GetState() //{ // return state; //} //黑箱备忘录 //提供一个方法,反调“以参数形式传入的Originator”的改变状态接口(或者将originator直接放在Memento构造时)。 //这样, 虽然这个方法是公有的,但只可能被Originator使用, 保证了备忘录的安全性。缺点是, Memento反向依赖了Originator,增加了耦合度。 public void Restore(Originator originator) { originator.ChangeState(this.state); }