Skip to content

Commit 19554d2

Browse files
committed
added visitor pattern sample
1 parent 23e2fae commit 19554d2

File tree

11 files changed

+188
-0
lines changed

11 files changed

+188
-0
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
<module>state</module>
4141
<module>strategy</module>
4242
<module>template-method</module>
43+
<module>visitor</module>
4344
</modules>
4445

4546
<build>

visitor/pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<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"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>com.iluwatar</groupId>
7+
<artifactId>java-design-patterns</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<groupId>com.iluwatar</groupId>
11+
<artifactId>visitor</artifactId>
12+
<version>1.0-SNAPSHOT</version>
13+
<name>visitor</name>
14+
<url>http://maven.apache.org</url>
15+
<dependencies>
16+
<dependency>
17+
<groupId>junit</groupId>
18+
<artifactId>junit</artifactId>
19+
<version>3.8.1</version>
20+
<scope>test</scope>
21+
</dependency>
22+
</dependencies>
23+
</project>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.iluwatar;
2+
3+
public class App
4+
{
5+
public static void main( String[] args )
6+
{
7+
8+
Commander commander = new Commander(
9+
new Sergeant(new Soldier(), new Soldier(), new Soldier()),
10+
new Sergeant(new Soldier(), new Soldier(), new Soldier()));
11+
commander.accept(new SoldierVisitor());
12+
commander.accept(new SergeantVisitor());
13+
commander.accept(new CommanderVisitor());
14+
15+
}
16+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.iluwatar;
2+
3+
public class Commander extends Unit {
4+
5+
public Commander(Unit ... children) {
6+
super(children);
7+
}
8+
9+
@Override
10+
public void accept(UnitVisitor visitor) {
11+
visitor.visitCommander(this);
12+
super.accept(visitor);
13+
}
14+
15+
@Override
16+
public String toString() {
17+
return "commander";
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.iluwatar;
2+
3+
public class CommanderVisitor implements UnitVisitor {
4+
5+
@Override
6+
public void visitSoldier(Soldier soldier) {
7+
// TODO Auto-generated method stub
8+
9+
}
10+
11+
@Override
12+
public void visitSergeant(Sergeant sergeant) {
13+
// TODO Auto-generated method stub
14+
15+
}
16+
17+
@Override
18+
public void visitCommander(Commander commander) {
19+
System.out.println("Good to see you " + commander);
20+
}
21+
22+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.iluwatar;
2+
3+
public class Sergeant extends Unit {
4+
5+
public Sergeant(Unit ... children) {
6+
super(children);
7+
}
8+
9+
@Override
10+
public void accept(UnitVisitor visitor) {
11+
visitor.visitSergeant(this);
12+
super.accept(visitor);
13+
}
14+
15+
@Override
16+
public String toString() {
17+
return "sergeant";
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.iluwatar;
2+
3+
public class SergeantVisitor implements UnitVisitor {
4+
5+
@Override
6+
public void visitSoldier(Soldier soldier) {
7+
// TODO Auto-generated method stub
8+
9+
}
10+
11+
@Override
12+
public void visitSergeant(Sergeant sergeant) {
13+
System.out.println("Hello " + sergeant);
14+
}
15+
16+
@Override
17+
public void visitCommander(Commander commander) {
18+
// TODO Auto-generated method stub
19+
20+
}
21+
22+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.iluwatar;
2+
3+
public class Soldier extends Unit {
4+
5+
public Soldier(Unit ... children) {
6+
super(children);
7+
}
8+
9+
@Override
10+
public void accept(UnitVisitor visitor) {
11+
visitor.visitSoldier(this);
12+
super.accept(visitor);
13+
}
14+
15+
@Override
16+
public String toString() {
17+
return "soldier";
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.iluwatar;
2+
3+
public class SoldierVisitor implements UnitVisitor {
4+
5+
@Override
6+
public void visitSoldier(Soldier soldier) {
7+
System.out.println("Greetings " + soldier);
8+
}
9+
10+
@Override
11+
public void visitSergeant(Sergeant sergeant) {
12+
// TODO Auto-generated method stub
13+
14+
}
15+
16+
@Override
17+
public void visitCommander(Commander commander) {
18+
// TODO Auto-generated method stub
19+
20+
}
21+
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.iluwatar;
2+
3+
public abstract class Unit {
4+
5+
private Unit[] children;
6+
7+
public Unit(Unit ... children) {
8+
this.children = children;
9+
}
10+
11+
public void accept(UnitVisitor visitor) {
12+
for (Unit child: children) {
13+
child.accept(visitor);
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)