diff --git a/message-channel/.gitignore b/message-channel/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/message-channel/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/message-channel/etc/message-channel.png b/message-channel/etc/message-channel.png
new file mode 100644
index 000000000..7db473281
Binary files /dev/null and b/message-channel/etc/message-channel.png differ
diff --git a/message-channel/etc/message-channel.ucls b/message-channel/etc/message-channel.ucls
new file mode 100644
index 000000000..3ef0ed4bc
--- /dev/null
+++ b/message-channel/etc/message-channel.ucls
@@ -0,0 +1,320 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/message-channel/index.md b/message-channel/index.md
new file mode 100644
index 000000000..b5fb1761a
--- /dev/null
+++ b/message-channel/index.md
@@ -0,0 +1,21 @@
+---
+layout: pattern
+title: Message Channel
+folder: message-channel
+permalink: /patterns/message-channel/
+categories: Integration
+tags: Java
+---
+
+**Intent:** When two applications communicate using a messaging system they do it by using logical addresses
+of the system, so called Message Channels.
+
+
+
+**Applicability:** Use the Message Channel pattern when
+
+* two or more applications need to communicate using a messaging system
+
+**Real world examples:**
+
+* [akka-camel](http://doc.akka.io/docs/akka/snapshot/scala/camel.html)
diff --git a/message-channel/pom.xml b/message-channel/pom.xml
new file mode 100644
index 000000000..ef66f2401
--- /dev/null
+++ b/message-channel/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.6.0
+
+ message-channel
+
+
+ org.apache.camel
+ camel-core
+
+
+ org.apache.camel
+ camel-stream
+
+
+ junit
+ junit
+ test
+
+
+
diff --git a/message-channel/src/main/java/com/iluwatar/message/channel/App.java b/message-channel/src/main/java/com/iluwatar/message/channel/App.java
new file mode 100644
index 000000000..f9a334a8a
--- /dev/null
+++ b/message-channel/src/main/java/com/iluwatar/message/channel/App.java
@@ -0,0 +1,53 @@
+package com.iluwatar.message.channel;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+
+/**
+ *
+ * When two applications communicate with each other using a messaging system
+ * they first need to establish a communication channel that will carry the
+ * data. Message Channel decouples Message producers and consumers.
+ *
+ * The sending application doesn't necessarily know what particular application
+ * will end up retrieving it, but it can be assured that the application that
+ * retrieves the information is interested in that information. This is because
+ * the messaging system has different Message Channels for different types of
+ * information the applications want to communicate. When an application sends
+ * information, it doesn't randomly add the information to any channel available;
+ * it adds it to a channel whose specific purpose is to communicate that sort of
+ * information. Likewise, an application that wants to receive particular information
+ * doesn't pull info off some random channel; it selects what channel to get information
+ * from based on what type of information it wants.
+ *
+ * In this example we use Apache Camel to establish two different Message Channels. The first
+ * one reads from standard input and delivers messages to Direct endpoint. The second Message
+ * Channel is established from the Direct component to console output. No actual messages are sent,
+ * only the established routes are printed to standard output.
+ *
+ */
+public class App {
+
+ /**
+ * Program entry point
+ * @param args command line args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ CamelContext context = new DefaultCamelContext();
+
+ context.addRoutes(new RouteBuilder() {
+
+ @Override
+ public void configure() throws Exception {
+ from("stream:in").to("direct:greetings");
+ from("direct:greetings").to("stream:out");
+ }
+ });
+
+ context.start();
+ context.getRoutes().stream().forEach((r) -> System.out.println(r));
+ context.stop();
+ }
+}
diff --git a/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java b/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java
new file mode 100644
index 000000000..fa3af1161
--- /dev/null
+++ b/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java
@@ -0,0 +1,17 @@
+package com.iluwatar.message.channel;
+
+import org.junit.Test;
+
+/**
+ *
+ * Application test
+ *
+ */
+public class AppTest {
+
+ @Test
+ public void test() throws Exception {
+ String[] args = {};
+ App.main(args);
+ }
+}
diff --git a/model-view-controller/index.md b/model-view-controller/index.md
index 5a12bc656..f96daf243 100644
--- a/model-view-controller/index.md
+++ b/model-view-controller/index.md
@@ -17,3 +17,7 @@ display.
**Applicability:** Use the Model-View-Controller pattern when
* you want to clearly separate the domain data from its user interface representation
+
+**Credits:**
+
+* [Trygve Reenskaug - Model-view-controller](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
diff --git a/model-view-controller/pom.xml b/model-view-controller/pom.xml
index 3a9167f5e..7162c71d9 100644
--- a/model-view-controller/pom.xml
+++ b/model-view-controller/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
model-view-controller
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/App.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/App.java
new file mode 100644
index 000000000..0b74f4b5a
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/App.java
@@ -0,0 +1,29 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * In this second example the model-view relationship is different. This time we use the Observer pattern to notify
+ * the {@link GiantView} each time the {@link GiantModel} is changed. This way the {@link GiantController} responsibilities
+ * are narrowed and it only needs to modify the {@link GiantModel} according to the user input.
+ *
+ */
+public class App {
+
+ /**
+ * Program entry point
+ * @param args command line args
+ */
+ public static void main( String[] args ) {
+ // create model, view and controller
+ GiantModel giant = new GiantModel(Health.HEALTHY, Fatigue.ALERT, Nourishment.SATURATED);
+ GiantView view = new GiantView();
+ GiantController controller = new GiantController(giant, view);
+ // initial display
+ controller.updateView();
+ // controller receives some interactions that affect the giant
+ // model modifications trigger the view rendering automatically
+ controller.setHealth(Health.WOUNDED);
+ controller.setNourishment(Nourishment.HUNGRY);
+ controller.setFatigue(Fatigue.TIRED);
+ }
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Fatigue.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Fatigue.java
new file mode 100644
index 000000000..301a579fb
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Fatigue.java
@@ -0,0 +1,22 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * Fatigue enumeration
+ *
+ */
+public enum Fatigue {
+
+ ALERT("alert"), TIRED("tired"), SLEEPING("sleeping");
+
+ private String title;
+
+ Fatigue(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return title;
+ }
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantController.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantController.java
new file mode 100644
index 000000000..e892b2946
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantController.java
@@ -0,0 +1,46 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * GiantController updates the giant model.
+ *
+ */
+public class GiantController {
+
+ private GiantModel giant;
+ private GiantView view;
+
+ public GiantController(GiantModel giant, GiantView view) {
+ this.giant = giant;
+ this.view = view;
+ this.giant.registerObserver(this.view);
+ }
+
+ public Health getHealth() {
+ return giant.getHealth();
+ }
+
+ public void setHealth(Health health) {
+ this.giant.setHealth(health);
+ }
+
+ public Fatigue getFatigue() {
+ return giant.getFatigue();
+ }
+
+ public void setFatigue(Fatigue fatigue) {
+ this.giant.setFatigue(fatigue);
+ }
+
+ public Nourishment getNourishment() {
+ return giant.getNourishment();
+ }
+
+ public void setNourishment(Nourishment nourishment) {
+ this.giant.setNourishment(nourishment);
+ }
+
+ public void updateView() {
+ this.view.displayGiant(giant);
+ }
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantModel.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantModel.java
new file mode 100644
index 000000000..84b32a50a
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantModel.java
@@ -0,0 +1,63 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * GiantModel contains the giant data.
+ *
+ */
+public class GiantModel {
+
+ private Health health;
+ private Fatigue fatigue;
+ private Nourishment nourishment;
+ private List observers = new ArrayList<>();
+
+ GiantModel(Health health, Fatigue fatigue, Nourishment nourishment) {
+ this.health = health;
+ this.fatigue = fatigue;
+ this.nourishment = nourishment;
+ }
+
+ public Health getHealth() {
+ return health;
+ }
+
+ public void setHealth(Health health) {
+ this.health = health;
+ notifyObservers();
+ }
+
+ public Fatigue getFatigue() {
+ return fatigue;
+ }
+
+ public void setFatigue(Fatigue fatigue) {
+ this.fatigue = fatigue;
+ notifyObservers();
+ }
+
+ public Nourishment getNourishment() {
+ return nourishment;
+ }
+
+ public void setNourishment(Nourishment nourishment) {
+ this.nourishment = nourishment;
+ notifyObservers();
+ }
+
+ @Override
+ public String toString() {
+ return String.format("The giant looks %s, %s and %s.", health, fatigue, nourishment);
+ }
+
+ public void registerObserver(GiantModelObserver observer) {
+ observers.add(observer);
+ }
+
+ private void notifyObservers() {
+ observers.stream().forEach((GiantModelObserver o) -> o.modelChanged(this));
+ }
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantModelObserver.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantModelObserver.java
new file mode 100644
index 000000000..6363ef4f7
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantModelObserver.java
@@ -0,0 +1,12 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * GiantModelObserver is the interface for delivering update notifications.
+ *
+ */
+public interface GiantModelObserver {
+
+ void modelChanged(GiantModel model);
+
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantView.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantView.java
new file mode 100644
index 000000000..f4cebad80
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/GiantView.java
@@ -0,0 +1,18 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * GiantView displays the giant
+ *
+ */
+public class GiantView implements GiantModelObserver {
+
+ public void displayGiant(GiantModel giant) {
+ System.out.println(giant);
+ }
+
+ @Override
+ public void modelChanged(GiantModel model) {
+ displayGiant(model);
+ }
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Health.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Health.java
new file mode 100644
index 000000000..e4b8ed9a7
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Health.java
@@ -0,0 +1,22 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * Health enumeration
+ *
+ */
+public enum Health {
+
+ HEALTHY("healthy"), WOUNDED("wounded"), DEAD("dead");
+
+ private String title;
+
+ Health(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return title;
+ }
+}
diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Nourishment.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Nourishment.java
new file mode 100644
index 000000000..c1a8253c3
--- /dev/null
+++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/with/observer/Nourishment.java
@@ -0,0 +1,22 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+/**
+ *
+ * Nourishment enumeration
+ *
+ */
+public enum Nourishment {
+
+ SATURATED("saturated"), HUNGRY("hungry"), STARVING("starving");
+
+ private String title;
+
+ Nourishment(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return title;
+ }
+}
diff --git a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/with/observer/AppTest.java b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/with/observer/AppTest.java
new file mode 100644
index 000000000..9a43ce7bc
--- /dev/null
+++ b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/with/observer/AppTest.java
@@ -0,0 +1,19 @@
+package com.iluwatar.model.view.controller.with.observer;
+
+import org.junit.Test;
+
+import com.iluwatar.model.view.controller.with.observer.App;
+
+/**
+ *
+ * Application test
+ *
+ */
+public class AppTest {
+
+ @Test
+ public void test() {
+ String[] args = {};
+ App.main(args);
+ }
+}
diff --git a/model-view-presenter/index.md b/model-view-presenter/index.md
index 6b0994077..609c59c13 100644
--- a/model-view-presenter/index.md
+++ b/model-view-presenter/index.md
@@ -14,5 +14,6 @@ developers to build and test user interfaces.
**Applicability:** Use the Model-View-Presenter in any of the following
situations
+
* when you want to improve the "Separation of Concerns" principle in presentation logic
* when a user interface development and testing is necessary.
diff --git a/model-view-presenter/pom.xml b/model-view-presenter/pom.xml
index 5277e57ab..41a2d2013 100644
--- a/model-view-presenter/pom.xml
+++ b/model-view-presenter/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
model-view-presenter
model-view-presenter
diff --git a/multiton/pom.xml b/multiton/pom.xml
index 8f1220119..6ea1ad2fa 100644
--- a/multiton/pom.xml
+++ b/multiton/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
multiton
diff --git a/naked-objects/dom/pom.xml b/naked-objects/dom/pom.xml
index 620efa9d7..cadf6d82e 100644
--- a/naked-objects/dom/pom.xml
+++ b/naked-objects/dom/pom.xml
@@ -16,7 +16,7 @@
com.iluwatar
naked-objects
- 1.5.0
+ 1.6.0
naked-objects-dom
diff --git a/naked-objects/fixture/pom.xml b/naked-objects/fixture/pom.xml
index b0146e84e..33cd798f7 100644
--- a/naked-objects/fixture/pom.xml
+++ b/naked-objects/fixture/pom.xml
@@ -16,7 +16,7 @@
com.iluwatar
naked-objects
- 1.5.0
+ 1.6.0
naked-objects-fixture
diff --git a/naked-objects/index.md b/naked-objects/index.md
index cef2a9ede..805cea810 100644
--- a/naked-objects/index.md
+++ b/naked-objects/index.md
@@ -22,3 +22,7 @@ everything else is autogenerated by the framework.
**Real world examples:**
* [Apache Isis](https://isis.apache.org/)
+
+**Credits:**
+
+* [Richard Pawson - Naked Objects](http://downloads.nakedobjects.net/resources/Pawson%20thesis.pdf)
diff --git a/naked-objects/integtests/pom.xml b/naked-objects/integtests/pom.xml
index f479896cc..1fd518bb1 100644
--- a/naked-objects/integtests/pom.xml
+++ b/naked-objects/integtests/pom.xml
@@ -16,7 +16,7 @@
com.iluwatar
naked-objects
- 1.5.0
+ 1.6.0
naked-objects-integtests
diff --git a/naked-objects/pom.xml b/naked-objects/pom.xml
index 8860815af..8cac48a09 100644
--- a/naked-objects/pom.xml
+++ b/naked-objects/pom.xml
@@ -15,7 +15,7 @@
java-design-patterns
com.iluwatar
- 1.5.0
+ 1.6.0
naked-objects
@@ -350,17 +350,17 @@
${project.groupId}
naked-objects-dom
- 1.5.0
+ 1.6.0
${project.groupId}
naked-objects-fixture
- 1.5.0
+ 1.6.0
${project.groupId}
naked-objects-webapp
- 1.5.0
+ 1.6.0
diff --git a/naked-objects/webapp/pom.xml b/naked-objects/webapp/pom.xml
index 9873589c7..3e018995a 100644
--- a/naked-objects/webapp/pom.xml
+++ b/naked-objects/webapp/pom.xml
@@ -16,7 +16,7 @@
com.iluwatar
naked-objects
- 1.5.0
+ 1.6.0
naked-objects-webapp
diff --git a/null-object/pom.xml b/null-object/pom.xml
index dfa1c6891..eec32fd4d 100644
--- a/null-object/pom.xml
+++ b/null-object/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
null-object
diff --git a/object-pool/pom.xml b/object-pool/pom.xml
index 3226bf71c..4a3b237c6 100644
--- a/object-pool/pom.xml
+++ b/object-pool/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
object-pool
diff --git a/observer/pom.xml b/observer/pom.xml
index 49a484edf..19e93421c 100644
--- a/observer/pom.xml
+++ b/observer/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
observer
diff --git a/poison-pill/pom.xml b/poison-pill/pom.xml
index c3a5e46c1..2a0653981 100644
--- a/poison-pill/pom.xml
+++ b/poison-pill/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
poison-pill
diff --git a/pom.xml b/pom.xml
index ce298d61b..68cfab646 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
pom
@@ -17,6 +17,7 @@
3.1.0
0.7.2.201409121644
1.4
+ 2.15.3
abstract-factory
@@ -71,10 +72,11 @@
front-controller
repository
async-method-invocation
- business-delegate
- half-sync-half-async
+ business-delegate
+ half-sync-half-async
step-builder
layers
+ message-channel
reactor
@@ -105,6 +107,16 @@
commons-dbcp
${commons-dbcp.version}
+
+ org.apache.camel
+ camel-core
+ ${camel.version}
+
+
+ org.apache.camel
+ camel-stream
+ ${camel.version}
+
junit
junit
diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml
index 6e6817621..70a716062 100644
--- a/private-class-data/pom.xml
+++ b/private-class-data/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
private-class-data
diff --git a/property/pom.xml b/property/pom.xml
index 6b0511fe0..5435f06f5 100644
--- a/property/pom.xml
+++ b/property/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
property
diff --git a/prototype/pom.xml b/prototype/pom.xml
index 39d8b7d33..0ebba706e 100644
--- a/prototype/pom.xml
+++ b/prototype/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
prototype
diff --git a/proxy/pom.xml b/proxy/pom.xml
index 560c456b8..1f625d736 100644
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
proxy
diff --git a/repository/pom.xml b/repository/pom.xml
index fe3ca4c0d..db0a8af5f 100644
--- a/repository/pom.xml
+++ b/repository/pom.xml
@@ -6,7 +6,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
repository
diff --git a/resource-acquisition-is-initialization/pom.xml b/resource-acquisition-is-initialization/pom.xml
index fb965ca2d..c8382ceb8 100644
--- a/resource-acquisition-is-initialization/pom.xml
+++ b/resource-acquisition-is-initialization/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
resource-acquisition-is-initialization
diff --git a/servant/pom.xml b/servant/pom.xml
index b59a470f2..b6497215f 100644
--- a/servant/pom.xml
+++ b/servant/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
servant
diff --git a/service-layer/index.md b/service-layer/index.md
index 22afc1669..f9e7ac1cb 100644
--- a/service-layer/index.md
+++ b/service-layer/index.md
@@ -20,3 +20,7 @@ its business logic. The Service Layer fulfills this role.
* you want to encapsulate domain logic under API
* you need to implement multiple interfaces with common logic and data
+
+**Credits:**
+
+* [Martin Fowler - Service Layer](http://martinfowler.com/eaaCatalog/serviceLayer.html)
diff --git a/service-layer/pom.xml b/service-layer/pom.xml
index 96e4e6dbf..8e0ea8322 100644
--- a/service-layer/pom.xml
+++ b/service-layer/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
service-layer
diff --git a/service-locator/pom.xml b/service-locator/pom.xml
index 6b287242e..a596e4b0c 100644
--- a/service-locator/pom.xml
+++ b/service-locator/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
service-locator
diff --git a/singleton/pom.xml b/singleton/pom.xml
index dfb5cff82..cdd9b613a 100644
--- a/singleton/pom.xml
+++ b/singleton/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
singleton
diff --git a/specification/index.md b/specification/index.md
index 2609f50e5..6b76d5102 100644
--- a/specification/index.md
+++ b/specification/index.md
@@ -18,3 +18,7 @@ order
* you need to select a subset of objects based on some criteria, and to refresh the selection at various times
* you need to check that only suitable objects are used for a certain role (validation)
+
+**Credits:**
+
+* [Martin Fowler - Specifications](http://martinfowler.com/apsupp/spec.pdf)
diff --git a/specification/pom.xml b/specification/pom.xml
index 53e92fef1..b4d6efe90 100644
--- a/specification/pom.xml
+++ b/specification/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
specification
diff --git a/state/pom.xml b/state/pom.xml
index e9178d0ae..0119146b3 100644
--- a/state/pom.xml
+++ b/state/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
state
diff --git a/step-builder/index.md b/step-builder/index.md
index 636504598..766479358 100644
--- a/step-builder/index.md
+++ b/step-builder/index.md
@@ -13,3 +13,7 @@ The user experience will be much more improved by the fact that he will only see

**Applicability:** Use the Step Builder pattern when the algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled the construction process must allow different representations for the object that's constructed when in the process of constructing the order is important.
+
+**Credits:**
+
+* [Marco Castigliego - Step Builder](http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html)
diff --git a/step-builder/pom.xml b/step-builder/pom.xml
index 8466266a7..f9c98474b 100644
--- a/step-builder/pom.xml
+++ b/step-builder/pom.xml
@@ -6,7 +6,7 @@
java-design-patterns
com.iluwatar
- 1.5.0
+ 1.6.0
step-builder
diff --git a/strategy/pom.xml b/strategy/pom.xml
index c24ccf9af..9532a8079 100644
--- a/strategy/pom.xml
+++ b/strategy/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
strategy
diff --git a/template-method/pom.xml b/template-method/pom.xml
index b0063c79e..53a7dc56e 100644
--- a/template-method/pom.xml
+++ b/template-method/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
template-method
diff --git a/thread-pool/pom.xml b/thread-pool/pom.xml
index 21f0bad3d..42e54de7e 100644
--- a/thread-pool/pom.xml
+++ b/thread-pool/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
thread-pool
diff --git a/tolerant-reader/index.md b/tolerant-reader/index.md
index 7e0ef4f32..b2bfd376a 100644
--- a/tolerant-reader/index.md
+++ b/tolerant-reader/index.md
@@ -17,3 +17,7 @@ changes, the readers must not break.
**Applicability:** Use the Tolerant Reader pattern when
* the communication schema can evolve and change and yet the receiving side should not break
+
+**Credits:**
+
+* [Martin Fowler - Tolerant Reader](http://martinfowler.com/bliki/TolerantReader.html)
diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml
index fb28424d4..7e852d4ee 100644
--- a/tolerant-reader/pom.xml
+++ b/tolerant-reader/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
tolerant-reader
diff --git a/visitor/pom.xml b/visitor/pom.xml
index a420b3269..8adda4855 100644
--- a/visitor/pom.xml
+++ b/visitor/pom.xml
@@ -5,7 +5,7 @@
com.iluwatar
java-design-patterns
- 1.5.0
+ 1.6.0
visitor