【发布时间】:2012-11-04 03:28:05
【问题描述】:
我喜欢有一种切换功能的模式,在我的情况下是撤消/重做。 我不想要撤消/重做的模式。这工作正常。 但这是跳过撤消/重做所需的代码行的好方法。 使用撤消的示例:
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 标志两次。
【问题讨论】: