private static void Main(string[] args) { Console.WriteLine("======= Demonstration of Command ======="); var doc = new Document(); const string line1 = "Chapter: The command pattern."; const string line2 = "Section 1: Problem"; const string line3 = "Command is a pattern that makes behavior an object."; Console.WriteLine("======= First - using method calls ======="); doc.Write(line1); doc.Write(line2); doc.Write(line3); Console.WriteLine(doc); Console.WriteLine("---> Erasing last entered line"); doc.Erase(line3); Console.WriteLine(doc); Console.WriteLine("======= Next - command objects assigned to F1..F3 ======="); doc = new Document(); // Create the commands ICommand write1 = new WriteCommand(doc, line1); ICommand write2 = new WriteCommand(doc, line2); ICommand write3 = new WriteCommand(doc, line3); // Note - nothing has happened to the document yet! // assign bindings to the F1 keys var f1 = new FKey(); var f2 = new FKey(); var f3 = new FKey(); // assign write commands to the keys f1.Assign(write1); f2.Assign(write2); f3.Assign(write3); // next press F1 to F3 and see the result in the document f1.Press(); f2.Press(); f3.Press(); Console.WriteLine(doc); // reassigning F2 Console.WriteLine("======= F2 reassigned and pressed ======="); ICommand write4 = new WriteCommand(doc, "A wrong line"); f2.Assign(write4); f2.Press(); Console.WriteLine(doc); // undoing the last operation Console.WriteLine("======= Undo of last insert ======="); write4.Undo(); Console.WriteLine(doc); Console.WriteLine("======= Next - macro magic ======="); doc = new Document(); var macro1 = new WriteCommand(doc, "Hello world!"); var marco2 = new WriteCommand(doc, "Hello world, again..."); var marco3 = new WriteCommand(doc, "Hello world, again and again..."); ICommand macroCommand = new MacroCommand(doc, new[] { macro1, marco2, marco3}); var macroKey = new FKey(); macroKey.Assign(macroCommand); macroKey.Press(); Console.WriteLine(doc); macroCommand.Undo(); Console.WriteLine(doc); Console.Read(); }
public MacroCommand(Document document, IList<ICommand> commands) { _document = document; _commands = commands; }