备忘录模式 保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
现实实例:打游戏时的存档。
优点: 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
下面通过 示例 来演示 备忘录模式:
namespace 备忘录模式
{
internal class Program
{
static void Main(string[] args)
{
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.SetState("State #1");
originator.SetState("State #2");
careTaker.Add(originator.SavaState());
originator.SetState("State #3");
originator.SetState("State #4");
careTaker.Add(originator.SavaState());
originator.SetState("State #5");
originator.GetSavaState(careTaker.Get(0));
Console.WriteLine(originator.GetState());
originator.GetSavaState(careTaker.Get(1));
Console.WriteLine(originator.GetState());
/*
* 控制台输出
* State #2
State #4
*/
}
}
//备忘录类
public class Memento
{
private string state;
public Memento(string state)
{
this.state = state;
}
public string GetState()
{
return state;
}
}
//扩展 强化 备忘录
public class Originator
{
private string state;
public void SetState(string state)
{
this.state = state;
}
public string GetState()
{
return this.state;
}
public Memento SavaState()
{
return new Memento(this.state);
}
public void GetSavaState(Memento memento)
{
state =memento.GetState();
}
}
//添加 保存,获得保存
public class CareTaker
{
public List<Memento> mementos = new List<Memento>();
public void Add(Memento memento)
{
mementos.Add(memento);
}
public Memento Get(int index)
{
return mementos[index];
}
}
}
缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。