Skip to content

Commit 8c13dd0

Browse files
committed
Completed Double Dispatch example.
1 parent fba664b commit 8c13dd0

File tree

6 files changed

+86
-3
lines changed

6 files changed

+86
-3
lines changed

double-dispatch/src/main/java/com/iluwatar/App.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,17 @@ public class App {
88
public static void main( String[] args ) {
99
List<GameObject> objects = new ArrayList<>();
1010
objects.add(new FlamingAsteroid(0, 0, 5, 5));
11-
objects.add(new SpaceStationMir(1, 1, 4, 4));
11+
objects.add(new SpaceStationMir(1, 1, 2, 2));
1212
objects.add(new Meteoroid(10, 10, 15, 15));
13-
objects.add(new SpaceStationIss(12, 11, 14, 15));
14-
objects.stream().forEach(o1 -> objects.stream().forEach(o2 -> { if (o1 != o2) System.out.println(String.format("%s -> %s", o1, o2)); } ));
13+
objects.add(new SpaceStationIss(12, 12, 14, 14));
14+
15+
objects.stream().forEach(o -> System.out.println(o));
16+
System.out.println("");
17+
18+
objects.stream().forEach(o1 -> objects.stream().forEach(o2 -> { if (o1 != o2 && o1.intersectsWith(o2)) o1.collision(o2); } ));
19+
System.out.println("");
20+
21+
objects.stream().forEach(o -> System.out.println(o));
22+
System.out.println("");
1523
}
1624
}

double-dispatch/src/main/java/com/iluwatar/FlamingAsteroid.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@ public FlamingAsteroid(int left, int top, int right, int bottom) {
66
super(left, top, right, bottom);
77
setOnFire(true);
88
}
9+
10+
@Override
11+
public void collision(GameObject gameObject) {
12+
gameObject.collisionResolve(this);
13+
}
914
}

double-dispatch/src/main/java/com/iluwatar/GameObject.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,14 @@ public boolean isDamaged() {
3030
public void setDamaged(boolean damaged) {
3131
this.damaged = damaged;
3232
}
33+
34+
public abstract void collision(GameObject gameObject);
35+
36+
public abstract void collisionResolve(FlamingAsteroid asteroid);
37+
38+
public abstract void collisionResolve(Meteoroid meteoroid);
39+
40+
public abstract void collisionResolve(SpaceStationMir mir);
41+
42+
public abstract void collisionResolve(SpaceStationIss iss);
3343
}

double-dispatch/src/main/java/com/iluwatar/Meteoroid.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,29 @@ public class Meteoroid extends GameObject {
55
public Meteoroid(int left, int top, int right, int bottom) {
66
super(left, top, right, bottom);
77
}
8+
9+
@Override
10+
public void collision(GameObject gameObject) {
11+
gameObject.collisionResolve(this);
12+
}
13+
14+
@Override
15+
public void collisionResolve(FlamingAsteroid asteroid) {
16+
System.out.println(String.format("%s hits %s", asteroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
17+
}
18+
19+
@Override
20+
public void collisionResolve(Meteoroid meteoroid) {
21+
System.out.println(String.format("%s hits %s", meteoroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
22+
}
23+
24+
@Override
25+
public void collisionResolve(SpaceStationMir mir) {
26+
System.out.println(String.format("%s hits %s", mir.getClass().getSimpleName(), this.getClass().getSimpleName()));
27+
}
28+
29+
@Override
30+
public void collisionResolve(SpaceStationIss iss) {
31+
System.out.println(String.format("%s hits %s", iss.getClass().getSimpleName(), this.getClass().getSimpleName()));
32+
}
833
}

double-dispatch/src/main/java/com/iluwatar/SpaceStationIss.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,9 @@ public class SpaceStationIss extends SpaceStationMir {
55
public SpaceStationIss(int left, int top, int right, int bottom) {
66
super(left, top, right, bottom);
77
}
8+
9+
@Override
10+
public void collision(GameObject gameObject) {
11+
gameObject.collisionResolve(this);
12+
}
813
}

double-dispatch/src/main/java/com/iluwatar/SpaceStationMir.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,34 @@ public class SpaceStationMir extends GameObject {
55
public SpaceStationMir(int left, int top, int right, int bottom) {
66
super(left, top, right, bottom);
77
}
8+
9+
@Override
10+
public void collision(GameObject gameObject) {
11+
gameObject.collisionResolve(this);
12+
}
13+
14+
@Override
15+
public void collisionResolve(FlamingAsteroid asteroid) {
16+
System.out.println(String.format("%s hits %s", asteroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
17+
setDamaged(true);
18+
setOnFire(true);
19+
}
20+
21+
@Override
22+
public void collisionResolve(Meteoroid meteoroid) {
23+
System.out.println(String.format("%s hits %s", meteoroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
24+
setDamaged(true);
25+
}
26+
27+
@Override
28+
public void collisionResolve(SpaceStationMir mir) {
29+
System.out.println(String.format("%s hits %s", mir.getClass().getSimpleName(), this.getClass().getSimpleName()));
30+
setDamaged(true);
31+
}
32+
33+
@Override
34+
public void collisionResolve(SpaceStationIss iss) {
35+
System.out.println(String.format("%s hits %s", iss.getClass().getSimpleName(), this.getClass().getSimpleName()));
36+
setDamaged(true);
37+
}
838
}

0 commit comments

Comments
 (0)