diff --git a/src/BehavioralPatterns/Program.cs b/src/BehavioralPatterns/Program.cs index 976f875..a193950 100644 --- a/src/BehavioralPatterns/Program.cs +++ b/src/BehavioralPatterns/Program.cs @@ -19,9 +19,11 @@ namespace BehavioralPatterns //This is usefull when you have a request and you don't know who should process it ChainOfResponsibillityExamples.Run(); Console.ReadKey(); + Console.Clear(); CommandPatternExamples.Run(); Console.ReadKey(); + Console.Clear(); IteratorPatternExamples.Run(); Console.ReadKey(); diff --git a/src/ChainOfResponssibility/PurchaseExample/CheckAuthority.cs b/src/ChainOfResponssibility/PurchaseExample/CheckAuthority.cs index 51a9c3b..4cfe78c 100644 --- a/src/ChainOfResponssibility/PurchaseExample/CheckAuthority.cs +++ b/src/ChainOfResponssibility/PurchaseExample/CheckAuthority.cs @@ -80,9 +80,10 @@ namespace ChainOfResponssibility.PurchaseExample } - public string GetDescriptionOfClass() + public string GetDescriptionOfExample() { - return @"CheckAuthority allows an employee to spend money + return @"Description of example: +CheckAuthority allows an employee to spend money if(manager can approve it) manager will process the request if (director can approve it) director will process the request if (vice president can approve it) vice president will process the request diff --git a/src/ChainOfResponssibility/RunChainOfResponsibillityExamples.cs b/src/ChainOfResponssibility/RunChainOfResponsibillityExamples.cs index 6c28c10..b8a728e 100644 --- a/src/ChainOfResponssibility/RunChainOfResponsibillityExamples.cs +++ b/src/ChainOfResponssibility/RunChainOfResponsibillityExamples.cs @@ -17,7 +17,7 @@ namespace ChainOfResponssibility CheckAuthority moneySpender = new CheckAuthority(); - Console.WriteLine(moneySpender.GetDescriptionOfClass()); + Console.WriteLine(moneySpender.GetDescriptionOfExample()); GoToNextStep(); moneySpender.PrintHowMuchEachCanSpend(); @@ -26,7 +26,7 @@ namespace ChainOfResponssibility TransferFilesManager transferFilesManager = new TransferFilesManager(); - Console.WriteLine(transferFilesManager.GetDescriptionOfClass()); + Console.WriteLine(transferFilesManager.GetDescriptionOfExample()); GoToNextStep(); transferFilesManager.TransferFiles(); @@ -50,7 +50,7 @@ namespace ChainOfResponssibility public static string GetPatternDescription() { - return @" + return @"Pattern description: Decouples sender and receiver (as a sender you don't know who will handle the request/ as a receiver you don't know who the sender is necessary) Hierarchical in nature When using the Chain of Responsibility is more effective: @@ -67,7 +67,7 @@ Examples in real life: public static string GetPitfalls() { - return @" + return @"Pitfalls: Handling/Handler guarantee - you won't be sure that someone can process the request Runtime configuration risk - the order matters/and it might be that the chain is not configured correctly Chain length/performance issues - in theory you could see a chain that is too big, and it would be a bottleneck in performance"; diff --git a/src/ChainOfResponssibility/TransferFileExample/TransferFilesManager.cs b/src/ChainOfResponssibility/TransferFileExample/TransferFilesManager.cs index eb0e606..fef789e 100644 --- a/src/ChainOfResponssibility/TransferFileExample/TransferFilesManager.cs +++ b/src/ChainOfResponssibility/TransferFileExample/TransferFilesManager.cs @@ -42,9 +42,10 @@ namespace ChainOfResponssibility.TransferFileExample return "exit".Equals(input, StringComparison.OrdinalIgnoreCase); } - public string GetDescriptionOfClass() + public string GetDescriptionOfExample() { - return @"TransferFilesManager will try to transfer the file to the destination by trying FTP, SFTP, Http, and simple file copy"; + return @"Description of example: +TransferFilesManager will try to transfer the file to the destination by trying FTP, SFTP, Http, and simple file copy"; } } } diff --git a/src/ChainOfResponssibility/Validators/UserEntities/UserProcessor.cs b/src/ChainOfResponssibility/Validators/UserEntities/UserProcessor.cs index 75fbd43..70129a6 100644 --- a/src/ChainOfResponssibility/Validators/UserEntities/UserProcessor.cs +++ b/src/ChainOfResponssibility/Validators/UserEntities/UserProcessor.cs @@ -2,9 +2,6 @@ using ChainOfResponssibility.Validators.UserEntities.UserMenu; using ChainOfResponssibility.Validators.UserEntities.Validators; using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace ChainOfResponssibility.Validators.UserEntities { diff --git a/src/CommandPattern/CommandPatternExamples.cs b/src/CommandPattern/CommandPatternExamples.cs index 2f7b724..0e50ac4 100644 --- a/src/CommandPattern/CommandPatternExamples.cs +++ b/src/CommandPattern/CommandPatternExamples.cs @@ -11,6 +11,7 @@ namespace CommandPattern public static void Run() { Console.WriteLine(GetPatternDescription()); + Console.WriteLine(GetActors()); GoToNextStep(); StockExampleRunner stockExampleRunner = new StockExampleRunner(); @@ -21,6 +22,13 @@ namespace CommandPattern stockExampleRunner.RunWithMarketClosed(); stockExampleRunner.RunWithMarketOpened(); stockExampleRunner.RunWithMarketOpeningInTwoSeconds(); + + GoToNextStep(); + Console.WriteLine(GetPitfalls()); + Console.WriteLine(CommandWithUndoDescription()); + + GoToNextStep(); + } private static void GoToNextStep() @@ -31,7 +39,7 @@ namespace CommandPattern public static string GetPatternDescription() { - return @" + return @"Patttern description: command pattern is a behavioral design pattern in which an object is used to encapsulate all information needed to perform an action or trigger an event at a later time Uses: @@ -42,5 +50,31 @@ sequence of actions simply by keeping a list of the command objects as they are 4. Parallel processing 5. Transactional behavior "; } + + public static string GetActors() + { + return @"Actors: +Client: class that is making use of the command pattern, the one that uses the invoker, makes instance of commands, and passes the commands to the invoker +Invoker: Invokes the command (calls execute on the command) +Receiver: the class that the command is using as an implementation +Command interface: the interface for the commmands +Concrete Command: Concrete implementations of the command interface"; + } + + public static string GetPitfalls() + { + return @"Pitfalls: +Dependence on other patterns +Multiple commands having the same implementation"; + } + + public static string CommandWithUndoDescription() + { + return @"Undo functionality: +While it is true that it would be easy using Command pattern to implement at the invoker +level undo/redo functionality, in practice this only works for simple examples, +where all entities are at the same level. More details about undo can be seen at: +http://gernotklingler.com/blog/implementing-undoredo-with-the-command-pattern/"; + } } } diff --git a/src/CommandPattern/StocksExample/StockExampleRunner.cs b/src/CommandPattern/StocksExample/StockExampleRunner.cs index 3a4f148..30acf60 100644 --- a/src/CommandPattern/StocksExample/StockExampleRunner.cs +++ b/src/CommandPattern/StocksExample/StockExampleRunner.cs @@ -55,7 +55,7 @@ namespace CommandPattern.StocksExample public string GetDescriptionOfExample() { - return @" + return @"Example description: Buy or sell a stock on the market. If the market is closed save the orders for when the market opens again. When the market opens place all the orders.";