我喜欢有一种切换功能的模式,在我的情况下是撤消/重做。 我不想要撤销/重做模式。这工作正常。 但是一种跳过撤销/重做需要的代码行的好方法。 示例使用撤消:模式例如撤消/重做
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