added visitor pattern sample

This commit is contained in:
Ilkka Seppala
2014-08-23 18:45:55 +03:00
parent 23e2faeca2
commit 19554d2329
11 changed files with 188 additions and 0 deletions

View File

@ -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());
}
}

View File

@ -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";
}
}

View File

@ -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);
}
}

View File

@ -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";
}
}

View File

@ -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
}
}

View File

@ -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";
}
}

View File

@ -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
}
}

View File

@ -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);
}
}
}

View File

@ -0,0 +1,9 @@
package com.iluwatar;
public interface UnitVisitor {
void visitSoldier(Soldier soldier);
void visitSergeant(Sergeant sergeant);
void visitCommander(Commander commander);
}