static void Main(string[] args) { var invoker = new Invoker(); invoker.SetCommand("1", new CreateCommand()); invoker.SetCommand("2", new ComplexCommand(new ImportantBusinessClass())); invoker.SetCommand("3", new ChangeItemCommand(new Item() { Name = "ChangedItem", State = false })); string inputToQuit; do { Console.WriteLine("Choose command to execute"); invoker.PrintAllCommands(); var input = Console.ReadLine(); if (!invoker.TryActivateCommand(input)) { Console.WriteLine("Unknown command"); } Console.WriteLine("If you want to undo last command enter undo"); var undo = Console.ReadLine(); if (undo == "undo") { invoker.UndoLastCommand(); } Console.WriteLine("Do you wanna quit? y/n"); inputToQuit = Console.ReadLine(); } while (inputToQuit == "n"); Console.WriteLine("GoodBye"); }