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

@ -40,6 +40,7 @@
<module>state</module> <module>state</module>
<module>strategy</module> <module>strategy</module>
<module>template-method</module> <module>template-method</module>
<module>visitor</module>
</modules> </modules>
<build> <build>

23
visitor/pom.xml Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.iluwatar</groupId>
<artifactId>visitor</artifactId>
<version>1.0-SNAPSHOT</version>
<name>visitor</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

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