Update README.md

This commit is contained in:
Ilkka Seppälä 2020-08-29 11:29:30 +03:00
parent 8983f9c11c
commit 96c16a8f3a

View File

@ -9,27 +9,32 @@ tags:
--- ---
## Intent ## Intent
Avoid coupling the sender of a request to its receiver by giving Avoid coupling the sender of a request to its receiver by giving more than one object a chance to
more than one object a chance to handle the request. Chain the receiving handle the request. Chain the receiving objects and pass the request along the chain until an object
objects and pass the request along the chain until an object handles it. handles it.
## Explanation ## Explanation
Real world example Real world example
> The Orc King gives loud orders to his army. The closest one to react is the commander, then officer and then soldier. The commander, officer and soldier here form a chain of responsibility. > The Orc King gives loud orders to his army. The closest one to react is the commander, then
> officer and then soldier. The commander, officer and soldier here form a chain of responsibility.
In plain words In plain words
> It helps building a chain of objects. Request enters from one end and keeps going from object to object till it finds the suitable handler. > It helps to build a chain of objects. A request enters from one end and keeps going from an object
> to another until it finds a suitable handler.
Wikipedia says Wikipedia says
> In object-oriented design, the chain-of-responsibility pattern is a design pattern consisting of a source of command objects and a series of processing objects. Each processing object contains logic that defines the types of command objects that it can handle; the rest are passed to the next processing object in the chain. > In object-oriented design, the chain-of-responsibility pattern is a design pattern consisting of
> a source of command objects and a series of processing objects. Each processing object contains
> logic that defines the types of command objects that it can handle; the rest are passed to the
> next processing object in the chain.
**Programmatic Example** **Programmatic Example**
Translating our example with orcs from above. First we have the request class Translating our example with the orcs from above. First we have the `Request` class:
```java ```java
public class Request { public class Request {
@ -140,14 +145,16 @@ king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); // Orc so
``` ```
## Class diagram ## Class diagram
![alt text](./etc/chain.urm.png "Chain of Responsibility class diagram") ![alt text](./etc/chain.urm.png "Chain of Responsibility class diagram")
## Applicability ## Applicability
Use Chain of Responsibility when Use Chain of Responsibility when
* more than one object may handle a request, and the handler isn't known a priori. The handler should be ascertained automatically * More than one object may handle a request, and the handler isn't known a priori. The handler should be ascertained automatically.
* you want to issue a request to one of several objects without specifying the receiver explicitly * You want to issue a request to one of several objects without specifying the receiver explicitly.
* the set of objects that can handle a request should be specified dynamically * The set of objects that can handle a request should be specified dynamically.
## Real world examples ## Real world examples