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