• Undo/Redo实现


    一 使用Command模式如下:

    二使用Singleton的UndoManager如下:

    三C#的类代码如下:


    public interface ICommand
    {
       
    void Execute();
       
    void Reverse();
    }

    public class ACommand : ICommand
    {
       
    void Execute(){};
       
    void Reverse(){};
    }

    public class BCommand : ICommand
    {
       
    void Execute(){};
       
    void Reverse(){};
    }

    public class CCommand : ICommand
    {
       
    void Execute(){};
       
    void Reverse(){};
    }

    public class UndoManager 
    {
        
    public UndoManager()
        {
          UndoStack 
    = new Stack<ICommand>();
          RedoStack 
    = new Stack<ICommand>();
        } 

        
    public Stack<ICommand> UndoStack { getprotected set; }
        
    public Stack<ICommand> RedoStack { getprotected set; }

        
    public bool CanUndo { get { return UndoCommands.Count > 0; } }
        
    public bool CanRedo { get { return RedoCommands.Count > 0; } }


        
    public void Execute(ICommand command)
        {
          
    if (command == nullreturn;
          
    // Execute command
          command.Execute();      
          UndoStack.Push(command);
          
    // Clear the redo history upon adding new undo entry. 
          
    // This is a typical logic for most applications
          RedoStack.Clear();
        }

        
    public void Undo()
        {
          
    if (CanUndo)
          {
            ICommand command 
    = UndoStack.Pop();
            
    if(command != null)
            {
                command.Reverse();
                RedoStack.Push(command);
            }
          }
        }


        
    public void Redo()
        {
          
    if (CanRedo)
          {
            ICommand command 
    = RedoStack.Pop();
            
    if (command != null)
            {
              command.Execute(); 
              UndoStack.Push(command);
            }        
          }
        }
    }

    完!


    作者:iTech
    微信公众号: cicdops
    出处:http://itech.cnblogs.com/
    github:https://github.com/cicdops/cicdops

  • 相关阅读:
    MIPI DIsplay Panel And Linux Driver Model【转】
    Vim|多行行尾插入【转】
    LCD之mipi DSI接口驱动调试流程【转】
    Linux中的DRM 介绍【转】
    linux DRM driver 使用示例【转】
    从零开始写设备树DTS【转】
    linux内核中的宏ffs(x)【转】
    procps工具集 ----Linux中的可用内存指的是什么?【转】
    ps命令交叉编译【转】
    交叉编译Procps-ng-3.3.11【转】
  • 原文地址:https://www.cnblogs.com/itech/p/1727445.html
Copyright © 2020-2023  润新知