using System;
using System.Collections ;
namespace Pattern
{
public interface Command
{
void execute();
void undo();
}
//其中execute用来执行命令,undo用来恢复(undo).
//接下来实现这个接口,先来实现Cut命令:
public class CutCommand : Command
{
public void execute()
{
/* 备份旧数据 */
/* 剪切 */
}
public void undo()
{
/* 还原成备份的数据 */
}
}
//再来实现一个Delete命令:
public class DeleteCommand : Command
{
public void execute()
{
/* 备份旧数据 */
/* 删除 */
}
public void undo()
{
/* 还原成备份的数据 */
}
}
//这样的话我们每做一个编辑动作,就执行一个相应的command.接下来我们要考虑如何将这些执行过的命令保存下来,以实现undo/redo. 我们再设计一个CommandManager:
public interface CommandManager
{
void storeCommand(Command cmd);
void clearAllCommand();
void undo();
void redo();
}
//再来实现一个CommandManager, 我们称作CommandHistoryManager:
public class CommandHistoryManager : CommandManager
{
ArrayList undoList=new ArrayList();
ArrayList redoList=new ArrayList();
public void storeCommand(Command cmd)
{
undoList.Add(cmd);
}
public void clearAllCommand()
{
undoList.Clear();
redoList.Clear();
}
public void undo()
{
if ( undoList.Count <= 0 ) return;
Command cmd = (Command)undoList[undoList.Count -1];
cmd.undo();
undoList.Remove (cmd);
redoList.Add(cmd);
}
public void redo()
{
if ( redoList.Count <= 0 ) return;
Command cmd = (Command)redoList[redoList.Count -1];
cmd.execute();
redoList.Remove(cmd);
undoList.Add(cmd);
}
}
}