Namespace Undo Public Class CommandManager Protected Property UndoCommands As New Stack(Of ICommand) Protected Property RedoCommands As New Stack(Of ICommand) ''' ''' 运行命令,并将命令添加至撤销堆栈 ''' ''' Public Sub RunCommand(command As ICommand) command.Execute() AddUndoCommand(command) End Sub ''' ''' 将命令添加至撤销堆栈 ''' Public Sub AddUndoCommand(command As ICommand) UndoCommands.Push(command) If RedoCommands.Count > 0 Then ClearRedoCommands() End If End Sub ''' ''' 清空撤销命令堆栈 ''' Public Sub ClearUndoCommands() UndoCommands.Clear() End Sub ''' ''' 清空重做命令堆栈 ''' Public Sub ClearRedoCommands() RedoCommands.Clear() End Sub ''' ''' 清空撤销与重做命令堆栈 ''' Public Sub ClearCommands() ClearUndoCommands() ClearRedoCommands() End Sub ''' ''' 执行撤销命令 ''' Public Sub Undo() If UndoCommands.Count <= 0 Then Return Dim command As ICommand = UndoCommands.Pop() command.Undo() RedoCommands.Push(command) End Sub ''' ''' 执行重做命令 ''' Public Sub Redo() If RedoCommands.Count <= 0 Then Return Dim command As ICommand = RedoCommands.Pop() command.Redo() UndoCommands.Push(command) End Sub End Class End Namespace