我喜欢有一种切换功能的模式,在我的情况下是撤消/重做。我不想要撤消/重做的模式。这工作正常。但这是跳过撤消/重做所需的代码行的好方法。使用撤消的示例:
AddItemToList(object item)
{
Memento m = new Memento(..) // create application state object
m_list.Add(item);
m.AddState("item added", item); // store state change
m_Caretaker.Add(m); // store state object
}
没有撤消的例子:
AddItemToList(object item)
{
m_list.Add(item);
}
我喜欢有一个比这更优雅的模式:
AddItemToList(object item)
{
Memento m = null;
if(m_UndoEnabled)
{
m = new Memento(..) // create application state object
}
m_list.Add(item);
if(m_UndoEnabled)
{
m.AddState("item added", item); // store state change
m_Caretaker.Add(m); // store state object
}
}
我认为它不优雅的原因:我必须在每个应该支持 Undo/Redo 的函数中使用 booelan 标志两次。