class Memento
{
private int age;
public int Age
{
get
{
return age;
}
set
{
this.age = value;
}
}
public Memento(int _age)
{
age = _age;
}
}
class Person
{
private string name;
public string Name
{
get
{
return name;
}
set
{
this.name = value;
}
}
private int age;
public int Age
{
get
{
return age;
}
set
{
this.age = value;
}
}
public Memento SaveToMemento()
{
return new Memento(age);
}
public void ReadMemento(Memento m)
{
this.age = m.Age;
}
public void Show()
{
Console.WriteLine("我叫{0},今年{1}岁", name, age);
}
}
class MementoController
{
private Memento memento;
public Memento Memento
{
get
{
return memento;
}
set
{
this.memento = value;
}
}
}
//前端
class Program
{
static void Main(string[] args)
{
Person person = new Person();
MementoController mc = new MementoController();//备忘录管理者,不允许客户直接访问备忘录
person.Name = "张三";
person.Age = 15;
person.Show();
Console.WriteLine("把15岁存起来,以后老了在回来");
mc.Memento= person.SaveToMemento();
Console.WriteLine("20年过去了.....");
Console.WriteLine("30年过去了.....");
Console.WriteLine("40年过去了.....");
Console.WriteLine("50年过去了.....");
person.Age = person.Age+50;
person.Show();
Console.WriteLine("好想回到小时候.....那就回去把");
person.ReadMemento(mc.Memento);
person.Show();
Console.ReadLine();
}
}
总结:备忘录模式就是把对象的部分属性做备份(在对象之外),然后在想恢复的时候恢复。 原型模式的clone也可以备份数据,之所以还有备忘录模式,是因为clone是克隆的整个对象,而备忘录模式可以人为控制的只备份关键属性。如果扩展,不要改当前备忘录,添加新的类作为新的备忘录就好。 优点:随时还原 缺点:数据太大的话影响性能。