diff --git a/pom.xml b/pom.xml index 298732fd5..612cce368 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ state strategy template-method + visitor diff --git a/visitor/pom.xml b/visitor/pom.xml new file mode 100644 index 000000000..af1cb739d --- /dev/null +++ b/visitor/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + visitor + 1.0-SNAPSHOT + visitor + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/visitor/src/main/java/com/iluwatar/App.java b/visitor/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..1bf7cbf26 --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/App.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + + Commander commander = new Commander( + new Sergeant(new Soldier(), new Soldier(), new Soldier()), + new Sergeant(new Soldier(), new Soldier(), new Soldier())); + commander.accept(new SoldierVisitor()); + commander.accept(new SergeantVisitor()); + commander.accept(new CommanderVisitor()); + + } +} diff --git a/visitor/src/main/java/com/iluwatar/Commander.java b/visitor/src/main/java/com/iluwatar/Commander.java new file mode 100644 index 000000000..6366abeaf --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/Commander.java @@ -0,0 +1,19 @@ +package com.iluwatar; + +public class Commander extends Unit { + + public Commander(Unit ... children) { + super(children); + } + + @Override + public void accept(UnitVisitor visitor) { + visitor.visitCommander(this); + super.accept(visitor); + } + + @Override + public String toString() { + return "commander"; + } +} diff --git a/visitor/src/main/java/com/iluwatar/CommanderVisitor.java b/visitor/src/main/java/com/iluwatar/CommanderVisitor.java new file mode 100644 index 000000000..63904aa2c --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/CommanderVisitor.java @@ -0,0 +1,22 @@ +package com.iluwatar; + +public class CommanderVisitor implements UnitVisitor { + + @Override + public void visitSoldier(Soldier soldier) { + // TODO Auto-generated method stub + + } + + @Override + public void visitSergeant(Sergeant sergeant) { + // TODO Auto-generated method stub + + } + + @Override + public void visitCommander(Commander commander) { + System.out.println("Good to see you " + commander); + } + +} diff --git a/visitor/src/main/java/com/iluwatar/Sergeant.java b/visitor/src/main/java/com/iluwatar/Sergeant.java new file mode 100644 index 000000000..f56b3fc7a --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/Sergeant.java @@ -0,0 +1,19 @@ +package com.iluwatar; + +public class Sergeant extends Unit { + + public Sergeant(Unit ... children) { + super(children); + } + + @Override + public void accept(UnitVisitor visitor) { + visitor.visitSergeant(this); + super.accept(visitor); + } + + @Override + public String toString() { + return "sergeant"; + } +} diff --git a/visitor/src/main/java/com/iluwatar/SergeantVisitor.java b/visitor/src/main/java/com/iluwatar/SergeantVisitor.java new file mode 100644 index 000000000..5257ca4b5 --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/SergeantVisitor.java @@ -0,0 +1,22 @@ +package com.iluwatar; + +public class SergeantVisitor implements UnitVisitor { + + @Override + public void visitSoldier(Soldier soldier) { + // TODO Auto-generated method stub + + } + + @Override + public void visitSergeant(Sergeant sergeant) { + System.out.println("Hello " + sergeant); + } + + @Override + public void visitCommander(Commander commander) { + // TODO Auto-generated method stub + + } + +} diff --git a/visitor/src/main/java/com/iluwatar/Soldier.java b/visitor/src/main/java/com/iluwatar/Soldier.java new file mode 100644 index 000000000..45b9b1554 --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/Soldier.java @@ -0,0 +1,19 @@ +package com.iluwatar; + +public class Soldier extends Unit { + + public Soldier(Unit ... children) { + super(children); + } + + @Override + public void accept(UnitVisitor visitor) { + visitor.visitSoldier(this); + super.accept(visitor); + } + + @Override + public String toString() { + return "soldier"; + } +} diff --git a/visitor/src/main/java/com/iluwatar/SoldierVisitor.java b/visitor/src/main/java/com/iluwatar/SoldierVisitor.java new file mode 100644 index 000000000..fd80d553c --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/SoldierVisitor.java @@ -0,0 +1,22 @@ +package com.iluwatar; + +public class SoldierVisitor implements UnitVisitor { + + @Override + public void visitSoldier(Soldier soldier) { + System.out.println("Greetings " + soldier); + } + + @Override + public void visitSergeant(Sergeant sergeant) { + // TODO Auto-generated method stub + + } + + @Override + public void visitCommander(Commander commander) { + // TODO Auto-generated method stub + + } + +} diff --git a/visitor/src/main/java/com/iluwatar/Unit.java b/visitor/src/main/java/com/iluwatar/Unit.java new file mode 100644 index 000000000..df77a9776 --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/Unit.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +public abstract class Unit { + + private Unit[] children; + + public Unit(Unit ... children) { + this.children = children; + } + + public void accept(UnitVisitor visitor) { + for (Unit child: children) { + child.accept(visitor); + } + } +} diff --git a/visitor/src/main/java/com/iluwatar/UnitVisitor.java b/visitor/src/main/java/com/iluwatar/UnitVisitor.java new file mode 100644 index 000000000..dd55508c1 --- /dev/null +++ b/visitor/src/main/java/com/iluwatar/UnitVisitor.java @@ -0,0 +1,9 @@ +package com.iluwatar; + +public interface UnitVisitor { + + void visitSoldier(Soldier soldier); + void visitSergeant(Sergeant sergeant); + void visitCommander(Commander commander); + +}