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 -![Current design](misc/images/mars-rover-uml.png) \ No newline at end of file +![Current design](misc/images/mars-rover design.png) \ 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() {