機能を切り替えるためのパターンが好きです。私の場合は、元に戻る/やり直しです。Undo/Redoのパターンは必要ありません。これは正常に機能しています。ただし、Undo/Redoに必要なコード行をスキップするための良い方法です。undoを使用した例:
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
}
}
エレガントではないと思う理由:元に戻る/やり直しをサポートする各関数で、ブーエランフラグを2回使用する必要があります。