diff --git a/mediator/pom.xml b/mediator/pom.xml
new file mode 100644
index 000000000..6dbfaf9f5
--- /dev/null
+++ b/mediator/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.0-SNAPSHOT
+
+ com.iluwatar
+ mediator
+ 1.0-SNAPSHOT
+ mediator
+ http://maven.apache.org
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
diff --git a/mediator/src/main/java/com/iluwatar/Action.java b/mediator/src/main/java/com/iluwatar/Action.java
new file mode 100644
index 000000000..6dd42dc94
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/Action.java
@@ -0,0 +1,28 @@
+package com.iluwatar;
+
+public enum Action {
+
+ HUNT, TALE, GOLD, ENEMY;
+
+ public String toString() {
+
+ String s = "";
+ switch (this) {
+ case ENEMY:
+ s = "spotted enemies";
+ break;
+ case GOLD:
+ s = "found gold";
+ break;
+ case HUNT:
+ s = "hunted a rabbit";
+ break;
+ case TALE:
+ s = "tells a tale";
+ break;
+ default:
+ break;
+ }
+ return s;
+ };
+}
diff --git a/mediator/src/main/java/com/iluwatar/App.java b/mediator/src/main/java/com/iluwatar/App.java
new file mode 100644
index 000000000..3ee09beb2
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/App.java
@@ -0,0 +1,23 @@
+package com.iluwatar;
+
+public class App
+{
+ public static void main( String[] args )
+ {
+ Party party = new PartyImpl();
+ Hobbit hobbit = new Hobbit();
+ Wizard wizard = new Wizard();
+ Rogue rogue = new Rogue();
+ Hunter hunter = new Hunter();
+
+ party.addMember(hobbit);
+ party.addMember(wizard);
+ party.addMember(rogue);
+ party.addMember(hunter);
+
+ hobbit.act(Action.ENEMY);
+ wizard.act(Action.TALE);
+ rogue.act(Action.GOLD);
+ hunter.act(Action.HUNT);
+ }
+}
diff --git a/mediator/src/main/java/com/iluwatar/Hobbit.java b/mediator/src/main/java/com/iluwatar/Hobbit.java
new file mode 100644
index 000000000..ae8542fad
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/Hobbit.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class Hobbit extends PartyMemberBase {
+
+ @Override
+ public String toString() {
+ return "Hobbit";
+ }
+
+}
diff --git a/mediator/src/main/java/com/iluwatar/Hunter.java b/mediator/src/main/java/com/iluwatar/Hunter.java
new file mode 100644
index 000000000..e27cdf8b9
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/Hunter.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class Hunter extends PartyMemberBase {
+
+ @Override
+ public String toString() {
+ return "Hunter";
+ }
+
+}
diff --git a/mediator/src/main/java/com/iluwatar/Party.java b/mediator/src/main/java/com/iluwatar/Party.java
new file mode 100644
index 000000000..a13311fe4
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/Party.java
@@ -0,0 +1,9 @@
+package com.iluwatar;
+
+public interface Party {
+
+ void addMember(PartyMember member);
+
+ void act(PartyMember actor, Action action);
+
+}
diff --git a/mediator/src/main/java/com/iluwatar/PartyImpl.java b/mediator/src/main/java/com/iluwatar/PartyImpl.java
new file mode 100644
index 000000000..d95325d3f
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/PartyImpl.java
@@ -0,0 +1,37 @@
+package com.iluwatar;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PartyImpl implements Party {
+
+ private List members;
+
+ public PartyImpl() {
+ members = new ArrayList<>();
+ }
+
+ @Override
+ public void act(PartyMember actor, Action action) {
+ for (PartyMember member: members) {
+ if (member != actor) {
+ member.partyAction(action);
+ }
+ }
+ }
+
+ @Override
+ public void addMember(PartyMember member) {
+ members.add(member);
+ member.joinedParty(this);
+ }
+
+ // somebody hunts for food, call for dinner
+
+ // somebody spots enemy, alert everybody
+
+ // somebody finds gold, deal the gold with everybody
+
+ // somebody tells a tale, call everybody to listen
+
+}
diff --git a/mediator/src/main/java/com/iluwatar/PartyMember.java b/mediator/src/main/java/com/iluwatar/PartyMember.java
new file mode 100644
index 000000000..6a64cac77
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/PartyMember.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public interface PartyMember {
+
+ void joinedParty(Party party);
+
+ void partyAction(Action action);
+
+ void act(Action action);
+}
diff --git a/mediator/src/main/java/com/iluwatar/PartyMemberBase.java b/mediator/src/main/java/com/iluwatar/PartyMemberBase.java
new file mode 100644
index 000000000..77b7a7cb4
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/PartyMemberBase.java
@@ -0,0 +1,46 @@
+package com.iluwatar;
+
+public abstract class PartyMemberBase implements PartyMember {
+
+ protected Party party;
+
+ @Override
+ public void joinedParty(Party party) {
+ System.out.println(this + " joins the party");
+ this.party = party;
+ }
+
+ @Override
+ public void partyAction(Action action) {
+ String s = this + " ";
+ switch (action) {
+ case ENEMY:
+ s = s + "runs for cover";
+ break;
+ case GOLD:
+ s = s + "takes his share of the gold";
+ break;
+ case HUNT:
+ s = s + "arrives for dinner";
+ break;
+ case TALE:
+ s = s + "comes to listen";
+ break;
+ default:
+ break;
+ }
+ System.out.println(s);
+ }
+
+ @Override
+ public void act(Action action) {
+ if (party != null) {
+ System.out.println(this + " " + action.toString());
+ party.act(this, action);
+ }
+ }
+
+ @Override
+ public abstract String toString();
+
+}
diff --git a/mediator/src/main/java/com/iluwatar/Rogue.java b/mediator/src/main/java/com/iluwatar/Rogue.java
new file mode 100644
index 000000000..5990e0523
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/Rogue.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class Rogue extends PartyMemberBase {
+
+ @Override
+ public String toString() {
+ return "Rogue";
+ }
+
+}
diff --git a/mediator/src/main/java/com/iluwatar/Wizard.java b/mediator/src/main/java/com/iluwatar/Wizard.java
new file mode 100644
index 000000000..689879865
--- /dev/null
+++ b/mediator/src/main/java/com/iluwatar/Wizard.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class Wizard extends PartyMemberBase {
+
+ @Override
+ public String toString() {
+ return "Wizard";
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 3efe1bfa0..a717a68f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
command
interpreter
iterator
+ mediator