- 重複多次
- 取消(如果該物件有實作的話)
- 取消後又再重做
這裡實現一個可以做 上一步 & 下一步 的命令模式 如果要新增指令 只要繼承 ICommand 並實作 Execute() && Undo() 就行了 使用時只要呼叫 _cmd = new XXXCmd(); _cmd.Execute(); _cmdHistoryMgr.StoreCommand(_cmd);
上一步只需要呼叫 _cmdHistoryMgr.Undo(); 下一步則是呼叫 _cmdHistoryMgr.Redo(); 不需要管Command的細節 達到擴充性。
using System.Collections.Generic;
public interface ICommand
{
void Execute();
void Undo();
}
public interface ICommandManager
{
void StoreCommand(ICommand cmd);
void ClearAllCommand();
void Undo();
void Redo();
}
public class CommandHistoryManager : ICommandManager
{
Stack<ICommand> _undoStack = new Stack<ICommand>();
Stack<ICommand> _redoStack = new Stack<ICommand>();
public void ClearAllCommand()
{
_undoStack.Clear();
_redoStack.Clear();
}
public void StoreCommand(ICommand cmd)
{
_undoStack.Push(cmd);
}
public void Redo()
{
if (_redoStack.Count <= 0)
{
return;
}
ICommand cmd = _redoStack.Pop();
cmd.Execute();
_undoStack.Push(cmd);
}
public void Undo()
{
if(_undoStack.Count <= 0)
{
return;
}
ICommand cmd =_undoStack.Pop();
cmd.Undo();
_redoStack.Push(cmd);
}
}
沒有留言:
張貼留言