Update description on ChainOfResponssibility and Command pattern

This commit is contained in:
Petrutiu Mihai
2016-06-23 10:07:17 +03:00
parent 2f98e10ee2
commit 494e3650f9
7 changed files with 48 additions and 13 deletions

View File

@@ -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();

View File

@@ -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

View File

@@ -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";

View File

@@ -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";
}
}
}

View File

@@ -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
{

View File

@@ -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/";
}
}
}

View File

@@ -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.";