diff --git a/SOLUTION.md b/SOLUTION.md
index 6213252..70fc012 100644
--- a/SOLUTION.md
+++ b/SOLUTION.md
@@ -1,4 +1,4 @@
# MY SOLUTION
## Current design
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/misc/images/mars-rover design.png b/misc/images/mars-rover design.png
new file mode 100644
index 0000000..0930a74
Binary files /dev/null and b/misc/images/mars-rover design.png differ
diff --git a/misc/images/mars-rover-uml.png b/misc/images/mars-rover-uml.png
deleted file mode 100644
index 8bd30c5..0000000
Binary files a/misc/images/mars-rover-uml.png and /dev/null differ
diff --git a/rover-commands/pom.xml b/rover-commands/pom.xml
index 9b219eb..04962eb 100644
--- a/rover-commands/pom.xml
+++ b/rover-commands/pom.xml
@@ -10,7 +10,7 @@
4.0.0
rover-commands
- 1.0
+ 2.0
17
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java
new file mode 100644
index 0000000..77104cb
--- /dev/null
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java
@@ -0,0 +1,18 @@
+package cat.hack3.codingtests.marsrover;
+
+public class CommandFactory {
+ private final RotableRiderRover rover;
+
+ public CommandFactory(RotableRiderRover rover) {
+ this.rover = rover;
+ }
+
+ public RoverCommand createCommand(RoverCommand.Type type) {
+ return switch (type) {
+ case MOVE_FORWARD -> new MoveForwardCommand(rover);
+ case MOVE_BACKWARDS -> new MoveBackwardsCommand(rover);
+ case TURN_LEFT -> new TurnLeftCommand(rover);
+ case TURN_RIGHT -> new TurnRightCommand(rover);
+ };
+ }
+}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java
index c6a6602..de9ac8c 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java
@@ -1,6 +1,6 @@
package cat.hack3.codingtests.marsrover;
-public class MoveBackwardsCommand implements RoverCommand {
+class MoveBackwardsCommand implements RoverCommand {
private final RotableRiderRover rover;
public MoveBackwardsCommand(RotableRiderRover rover) {
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java
index 3374e2c..2f2d11b 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java
@@ -1,6 +1,6 @@
package cat.hack3.codingtests.marsrover;
-public class MoveForwardCommand implements RoverCommand {
+class MoveForwardCommand implements RoverCommand {
private final RotableRiderRover rover;
public MoveForwardCommand(RotableRiderRover rover) {
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java
index 54c139c..27e65ce 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java
@@ -1,5 +1,7 @@
package cat.hack3.codingtests.marsrover;
public interface RoverCommand {
+ enum Type {MOVE_FORWARD, MOVE_BACKWARDS, TURN_LEFT, TURN_RIGHT}
+
void execute();
}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java
index fd2b892..065082d 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java
@@ -2,7 +2,7 @@ package cat.hack3.codingtests.marsrover;
import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.LEFT;
-public class TurnLeftCommand implements RoverCommand {
+class TurnLeftCommand implements RoverCommand {
private final RotableRiderRover rover;
public TurnLeftCommand(RotableRiderRover rover) {
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java
index 8d7c12c..a4273e6 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java
@@ -2,7 +2,7 @@ package cat.hack3.codingtests.marsrover;
import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.RIGHT;
-public class TurnRightCommand implements RoverCommand {
+class TurnRightCommand implements RoverCommand {
private final RotableRiderRover rover;
public TurnRightCommand(RotableRiderRover rover) {
diff --git a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java
index 50fb1ee..53b8398 100644
--- a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java
+++ b/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java
@@ -8,12 +8,14 @@ import org.testng.annotations.Test;
import java.util.stream.IntStream;
+import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*;
import static cat.hack3.codingtests.marsrover.cartography.Direction.*;
import static org.testng.Assert.assertEquals;
public class MarsRoverTest {
private MarsRover rover;
+
private RoverCommand moveForwardCommand;
private RoverCommand moveBackwardsCommand;
private RoverCommand turnLeftCommand;
@@ -29,10 +31,11 @@ public class MarsRoverTest {
var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates);
rover = new MarsRover(marsMap, SOUTH);
- moveForwardCommand = new MoveForwardCommand(rover);
- moveBackwardsCommand = new MoveBackwardsCommand(rover);
- turnLeftCommand = new TurnLeftCommand(rover);
- turnRightCommand = new TurnRightCommand(rover);
+ var commandFactory = new CommandFactory(rover);
+ moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD);
+ moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS);
+ turnLeftCommand = commandFactory.createCommand(TURN_LEFT);
+ turnRightCommand = commandFactory.createCommand(TURN_RIGHT);
}
@Test
diff --git a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java b/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java
index d0c6e3b..eef547b 100644
--- a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java
+++ b/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java
@@ -8,6 +8,7 @@ import org.testng.annotations.Test;
import java.util.List;
+import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*;
import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
@@ -15,9 +16,10 @@ import static org.testng.Assert.assertNotEquals;
public class MarsRoverWithObstaclesTest {
private MarsRover rover;
- private MoveForwardCommand moveForwardCommand;
- private TurnLeftCommand turnLeftCommand;
- private TurnRightCommand turnRightCommand;
+
+ private RoverCommand moveForwardCommand;
+ private RoverCommand turnLeftCommand;
+ private RoverCommand turnRightCommand;
@BeforeMethod
public void setUp() {
@@ -36,9 +38,10 @@ public class MarsRoverWithObstaclesTest {
var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates, obstaclesLocalizations);
rover = new MarsRover(marsMap, SOUTH);
- moveForwardCommand = new MoveForwardCommand(rover);
- turnLeftCommand = new TurnLeftCommand(rover);
- turnRightCommand = new TurnRightCommand(rover);
+ var commandFactory = new CommandFactory(rover);
+ moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD);
+ turnLeftCommand = commandFactory.createCommand(TURN_LEFT);
+ turnRightCommand = commandFactory.createCommand(TURN_RIGHT);
}
@Test
diff --git a/user-interface-console/pom.xml b/user-interface-console/pom.xml
index 3b0eba7..dbcd0fd 100644
--- a/user-interface-console/pom.xml
+++ b/user-interface-console/pom.xml
@@ -25,7 +25,7 @@
cat.hack3.codingtests
rover-commands
- 1.0
+ 2.0
diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java
index 5af1abf..ba40194 100644
--- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java
+++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java
@@ -1,14 +1,19 @@
package cat.hack3.codingtests.marsrover.ui.console;
-import cat.hack3.codingtests.marsrover.*;
+import cat.hack3.codingtests.marsrover.CommandFactory;
+import cat.hack3.codingtests.marsrover.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.RoverCommand;
import java.util.Scanner;
+import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*;
import static cat.hack3.codingtests.marsrover.ui.console.UICommons.isNotExitSignal;
import static cat.hack3.codingtests.marsrover.ui.console.UICommons.output;
public class RoverCommandsPerformer {
private final Scanner reader;
+
+ CommandFactory commandFactory;
private final RoverCommand moveForwardCommand;
private final RoverCommand moveBackwardsCommand;
private final RoverCommand turnLeftCommand;
@@ -16,10 +21,11 @@ public class RoverCommandsPerformer {
public RoverCommandsPerformer(Scanner reader, RotableRiderRover rover) {
this.reader = reader;
- moveForwardCommand = new MoveForwardCommand(rover);
- moveBackwardsCommand = new MoveBackwardsCommand(rover);
- turnLeftCommand = new TurnLeftCommand(rover);
- turnRightCommand = new TurnRightCommand(rover);
+ commandFactory = new CommandFactory(rover);
+ moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD);
+ moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS);
+ turnLeftCommand = commandFactory.createCommand(TURN_LEFT);
+ turnRightCommand = commandFactory.createCommand(TURN_RIGHT);
}
public void acceptCommandsUntilExitSignal() {