-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCommandInvokerUndo.cs
More file actions
53 lines (42 loc) · 1.39 KB
/
CommandInvokerUndo.cs
File metadata and controls
53 lines (42 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
namespace GofPatterns.Behavioral.CommandPattern;
// ReSharper disable once MemberCanBeProtected.Global
public class CommandInvokerUndo<TCommandUndo, TCommandRequest> : ICommandInvokerUndo<TCommandUndo, TCommandRequest>
where TCommandUndo : ICommandUndo<TCommandRequest> where TCommandRequest : ICommandRequest
{
private IList<CommandWrapper> commandWrappers = new List<CommandWrapper>();
public void AddCommand(TCommandUndo command, bool undoFlag)
{
commandWrappers.Add(new CommandWrapper(command, undoFlag));
}
public int ExecuteCommands()
{
var count = commandWrappers.Count;
if (count < 1)
return count;
foreach (var commandWrapper in commandWrappers)
{
var undoFlag = commandWrapper.UndoFlag;
var command = commandWrapper.Command;
if (undoFlag)
command.UnExecute();
else
command.Execute();
}
EmptyCommandList();
return count;
}
private void EmptyCommandList()
{
commandWrappers = new List<CommandWrapper>();
}
private sealed class CommandWrapper
{
public CommandWrapper(TCommandUndo command, bool undoFlag)
{
Command = command;
UndoFlag = undoFlag;
}
public TCommandUndo Command { get; }
public bool UndoFlag { get; }
}
}