我喜歡有一種切換功能的模式,在我的情況下是撤消/重做。 我不想要撤銷/重做模式。這工作正常。 但是一種跳過撤銷/重做需要的代碼行的好方法。 示例使用撤消:模式例如撤消/重做
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
}
}
原因,我認爲這是不優雅: 我將不得不兩次使用booelan標誌,每個函數應該支持撤消/重做。
這對我來說比使用工廠更合理。 – deafjeff
使用這兩種模式都有很好的理由:可以用來創建狀態更改對象的工廠。第二,通過接口方法(如SwitchOn())啓用該功能的decorater。 – deafjeff
我沒有得到自動對焦的想法。 AF返回一組對象。閱讀有關窗口小部件和窗口的示例。 – Rob