Update readme

This commit is contained in:
Petrutiu Mihai
2016-07-12 13:32:58 +03:00
parent a63c77153f
commit 814e5a093c

View File

@@ -12,23 +12,28 @@ Hierarchical in nature
More than one object can handle a command More than one object can handle a command
The handler is not known in advance The handler is not known in advance
The handler should be determined automatically The handler should be determined automatically
Its wished that the request is addressed to a group of objects without explicitly specifying its receiver It<EFBFBD>s wished that the request is addressed to a group of objects without explicitly specifying its receiver
The group of objects that may handle the command must be specified in a dynamic way. The group of objects that may handle the command must be specified in a dynamic way.
Examples in real life: Examples in real life:
-java.util.logging.Logger.#log() -java.util.logging.Logger.#log()
-javax.servlet.Filter#doFilter() -javax.servlet.Filter#doFilter()
-Spring Security Filter Chain -Spring Security Filter Chain
### c. Pitfalls: ### c. Actors
* Client - creates the chain, and uses it
* Handler - defines an interface for handling the requests, optional to set the succesor
* Concrete Handler - handles requests it is responsible for, may request the successor to process the request if needed
### d. Pitfalls:
Handling/Handler guarantee - you won't be sure that someone can process the request 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 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 Chain length/performance issues - in theory you could see a chain that is too big, and it would be a bottleneck in performance
### d. Flavors: ### e. Flavors:
* Flavor 1: Execute first that matches the condition and exit -> Get one to process the request, or get the type of object * Flavor 1: Execute first that matches the condition and exit -> Get one to process the request, or get the type of object
* Flavor 2: Execute all elements of chain until the condition does not match -> Execute all validators until one invalidates the request * Flavor 2: Execute all elements of chain until the condition does not match -> Execute all validators until one invalidates the request
* Flavor 3: Always execute all handlers * Flavor 3: Always execute all handlers
* Flavor 4: Instead of each handler, having a successor, you could have each handler have a list of successors, and have it's policy what handlers to execute * Flavor 4: Instead of each handler, having a successor, you could have each handler have a list of successors, and have it's policy what handlers to execute
### e. Examples described: ### f. Examples described:
* Purchase example: * Purchase example:
Starting class: PurchaseExample.CheckAuthority Starting class: PurchaseExample.CheckAuthority
Problem that we are trying to solve: Problem that we are trying to solve:
@@ -53,6 +58,7 @@ For Create user: verify if the authenticated user is authorised to create a new
* Both the menu options and the validations for the operations are done using chain of responssibility * Both the menu options and the validations for the operations are done using chain of responssibility
2. Command pattern 2. Command pattern
------------------ ------------------
3. Iterator pattern 3. Iterator pattern
------------------ ------------------