谈到代码编辑器,基本功能的“撤销与重做”是必不可少的。
刚好最近看了设计模式的“命令模式”,做这个倒是正好
简单来说,就是把所以可以撤销的方法封装成类
这里有个简单的测试例子,演示了用“命令模式”实现的“撤销”功能
这里是两个基本接口
// 命令接口,所有能被编辑器接受命令都从这里继承
public interface ICommand
{
void Execute();
}
// 可撤销的命令借口,所有可撤销的命令都从这里继承
public interface IUndoCommand : ICommand
{
void Undo();
}
接下来是具体的命令
// 插入一个字符到编辑器的命令
public class InsertCharacterCommand : IUndoCommand
{
private CodeManager codeManager;
private int index;
private char ch;
public InsertCharacterCommand(CodeManager setCodeManager, int setIndex, char setCh)
{
this.codeManager = setCodeManager;
this.index = setIndex;
this.ch = setCh;
}
public void Execute()
{
codeManager.InserC