一般的文档软件,图形设计工具,都会有Redo/Undo (即重做/撤消)功能,可是如何也在自己的应用程序当中实现这样的功能,而且是没有操作次数地Redo/Undo?
此时“软件设计模式”就显得很重要。
这里实现的Redo/Undo主要应用的“命令模式”与“备忘录模式”。
《C#设计模式》一书里讲到只用备忘录模式来实现,我看了之后觉得那种方法太烦琐了,我们可以利用

C#2.0的新特性来使之简化。
首先,如果要让我们的每一步操作都是可撤消、重做的,那么我们必须要将这些操作涉及的代码“封装

”到一个方法里去,以供以后调用。而且有撤消、重做,那么必须有两部分代码:
1.正向操作的代码 DoOperation
2.反向(撤消)的代码 UndoOperation.

然后,要实现无次数限制的撤消、重做,我们应该要用两个栈(Stack)来保存操作。

下面的UML 类图:
无操作次数限制的 Undo/Redo 实现方案

下面是实现代码:
1.ICommand.cs

无操作次数限制的 Undo/Redo 实现方案    public interface ICommand
    }

2. 操作委托:

无操作次数限制的 Undo/Redo 实现方案public delegate void ActionHandler();

3. Command.cs

无操作次数限制的 Undo/Redo 实现方案    public class Command:ICommand 
    }

4. CommandManager.cs

无操作次数限制的 Undo/Redo 实现方案    public static class CommandManager
    }


5. Redo/Undo测试UI程序(Form), 在Form上添加三个Button控件:btnNew, btnRedo, btnUndo, 逻辑代

码如下:

无操作次数限制的 Undo/Redo 实现方案    public partial class Form1 : Form
    }

这是我第一次在Blog上写关于设计模式的心得体会,难免有写得不对之处,希望与大家多交流,多指正不当之处。。。。

相关文章:

  • 2021-06-26
  • 2022-03-10
  • 2021-08-20
  • 2021-12-26
  • 2022-12-23
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-24
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
  • 2021-07-18
相关资源
相似解决方案