备忘录模式是一种行为型设计模式,它允许你捕获对象的内部状态,并在不暴露其实现细节的情况下将其保存在外部对象中,从而可以在以后的某个时间点将该对象恢复到先前的状态。
备忘录模式有以下几个主要角色:
这些角色协同工作,使得Originator对象可以在不暴露其实现细节的情况下保存和恢复其状态。备忘录模式提供了一种灵活的方式,可以在多个时间点保存对象的状态,并可以在以后的某个时间点恢复到任何先前的状态。
下面使用C#实现一个简单备忘录模式:
public class Originator
{
private string state;
public string State
{
get { return state; }
set
{
state = value;
Console.WriteLine("State set to: " + state);
}
}
public Memento SaveState()
{
return new Memento(state);
}
public void RestoreState(Memento memento)
{
state = memento.State;
Console.WriteLine("State restored to: " + state);
}
}
public class Memento
{
private string state;
public Memento(string stateToSave)
{
state = stateToSave;
}
public string State
{
get { return state; }
}
}
public class Caretaker
{
private List<Memento> mementoList = new List<Memento>();
public void SaveState(Memento state)
{
mementoList.Add(state);
}
public Memento RestoreState(int stateNumber)
{
return mementoList[stateNumber];
}
}
调用代码:
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.State = "State 1";
originator.State = "State 2";
caretaker.SaveState(originator.SaveState());
originator.State = "State 3";
caretaker.SaveState(originator.SaveState());
originator.State = "State 4";
Console.WriteLine("Current state: " + originator.State);
// 恢复到之前的状态
originator.RestoreState(caretaker.RestoreState(1));
Console.WriteLine("Restored state: " + originator.State);
输出结果:
State set to: State 1
State set to: State 2
State set to: State 3
State set to: State 4
Current state: State 4
State restored to: State 3
Restored state: State 3
在这个例子中,Originator
是一个保存状态的对象,它的状态被保存到Memento
对象中。Caretaker
保存了Originator
的历史状态列表,并提供了保存和恢复这些状态的方法。当需要恢复之前的状态时,Caretaker
通过调用RestoreState
方法来获取Memento
对象,并将其传递给Originator
的RestoreState
方法,从而将Originator恢复到之前的状态。
备忘录模式的优点是它可以在不暴露对象实现细节的情况下保存和恢复对象的状态。它还允许对象在多个时间点保存它的状态,并恢复到之前的任何时间点。缺点是如果保存的状态非常大,它可能会占用大量的内存。此外,备忘录模式会增加代码的复杂性和开销。
在实际应用中,备忘录模式通常与其他模式一起使用,例如命令模式和状态模式,以实现更复杂的行为。
本文分享自 Niuery Diary 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!