diff --git a/chain/README.md b/chain-of-responsibility/README.md similarity index 86% rename from chain/README.md rename to chain-of-responsibility/README.md index 28fefc847..6bda8177b 100644 --- a/chain/README.md +++ b/chain-of-responsibility/README.md @@ -1,8 +1,8 @@ --- layout: pattern title: Chain of responsibility -folder: chain -permalink: /patterns/chain/ +folder: chain-of-responsibility +permalink: /patterns/chain-of-responsibility/ categories: Behavioral language: en tags: @@ -10,16 +10,17 @@ tags: --- ## Intent + Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. ## 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. +> an officer, and then a soldier. The commander, officer, and soldier form a chain of responsibility. In plain words @@ -35,7 +36,7 @@ Wikipedia says **Programmatic Example** -Translating our example with the orcs from above. First we have the `Request` class: +Translating our example with the orcs from above. First, we have the `Request` class: ```java public class Request { @@ -66,7 +67,7 @@ public enum RequestType { } ``` -Then the request handler hierarchy +Next, we show the request handler hierarchy. ```java @Slf4j @@ -116,7 +117,7 @@ public class OrcCommander extends RequestHandler { ``` -Then we have the Orc King who gives the orders and forms the chain +Th Orc King gives the orders and forms the chain. ```java public class OrcKing { @@ -136,18 +137,26 @@ public class OrcKing { } ``` -Then it is used as follows +The chain of responsibility in action. ```java var king = new OrcKing(); -king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); // Orc commander handling request "defend castle" -king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); // Orc officer handling request "torture prisoner" -king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); // Orc soldier handling request "collect tax" +king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); +king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); +king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); +``` + +The console output. + +``` +Orc commander handling request "defend castle" +Orc officer handling request "torture prisoner" +Orc soldier handling request "collect tax" ``` ## Class diagram -![alt text](./etc/chain.urm.png "Chain of Responsibility class diagram") +![alt text](./etc/chain-of-responsibility.urm.png "Chain of Responsibility class diagram") ## Applicability @@ -157,7 +166,7 @@ Use Chain of Responsibility when * 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. -## Real world examples +## Real-world examples * [java.util.logging.Logger#log()](http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#log%28java.util.logging.Level,%20java.lang.String%29) * [Apache Commons Chain](https://commons.apache.org/proper/commons-chain/index.html) diff --git a/chain/etc/chain.urm.png b/chain-of-responsibility/etc/chain-of-responsibility.urm.png similarity index 100% rename from chain/etc/chain.urm.png rename to chain-of-responsibility/etc/chain-of-responsibility.urm.png diff --git a/chain/etc/chain.urm.puml b/chain-of-responsibility/etc/chain-of-responsibility.urm.puml similarity index 100% rename from chain/etc/chain.urm.puml rename to chain-of-responsibility/etc/chain-of-responsibility.urm.puml diff --git a/chain/pom.xml b/chain-of-responsibility/pom.xml similarity index 97% rename from chain/pom.xml rename to chain-of-responsibility/pom.xml index 211b38ca4..8482fad42 100644 --- a/chain/pom.xml +++ b/chain-of-responsibility/pom.xml @@ -31,7 +31,7 @@ java-design-patterns 1.25.0-SNAPSHOT - chain + chain-of-responsibility org.junit.jupiter diff --git a/chain/src/main/java/com/iluwatar/chain/App.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/App.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/App.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/App.java diff --git a/chain/src/main/java/com/iluwatar/chain/OrcCommander.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcCommander.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/OrcCommander.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcCommander.java diff --git a/chain/src/main/java/com/iluwatar/chain/OrcKing.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcKing.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/OrcKing.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcKing.java diff --git a/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcOfficer.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/OrcOfficer.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcOfficer.java diff --git a/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcSoldier.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/OrcSoldier.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcSoldier.java diff --git a/chain/src/main/java/com/iluwatar/chain/Request.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/Request.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/Request.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/Request.java diff --git a/chain/src/main/java/com/iluwatar/chain/RequestHandler.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/RequestHandler.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/RequestHandler.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/RequestHandler.java diff --git a/chain/src/main/java/com/iluwatar/chain/RequestType.java b/chain-of-responsibility/src/main/java/com/iluwatar/chain/RequestType.java similarity index 100% rename from chain/src/main/java/com/iluwatar/chain/RequestType.java rename to chain-of-responsibility/src/main/java/com/iluwatar/chain/RequestType.java diff --git a/chain/src/test/java/com/iluwatar/chain/AppTest.java b/chain-of-responsibility/src/test/java/com/iluwatar/chain/AppTest.java similarity index 100% rename from chain/src/test/java/com/iluwatar/chain/AppTest.java rename to chain-of-responsibility/src/test/java/com/iluwatar/chain/AppTest.java diff --git a/chain/src/test/java/com/iluwatar/chain/OrcKingTest.java b/chain-of-responsibility/src/test/java/com/iluwatar/chain/OrcKingTest.java similarity index 100% rename from chain/src/test/java/com/iluwatar/chain/OrcKingTest.java rename to chain-of-responsibility/src/test/java/com/iluwatar/chain/OrcKingTest.java diff --git a/pom.xml b/pom.xml index df2f45317..31cf03b4d 100644 --- a/pom.xml +++ b/pom.xml @@ -105,7 +105,7 @@ facade flyweight proxy - chain + chain-of-responsibility command interpreter iterator