From 535ae91e6c8ead27af4f34c88c642d3814234775 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Sat, 22 Jun 2024 15:47:14 +0200 Subject: [PATCH] make Rover abstract to commands --- .../hack3/codingtests/marsrover/MarsRover.java | 7 +++++-- .../marsrover/MoveBackwardsCommand.java | 8 ++++---- .../marsrover/MoveForwardCommand.java | 8 ++++---- .../codingtests/marsrover/RotableRiderRover.java | 16 ++++++++++++++++ .../codingtests/marsrover/TurnLeftCommand.java | 12 +++++++----- .../codingtests/marsrover/TurnRightCommand.java | 12 +++++++----- .../codingtests/marsrover/MarsRoverTest.java | 8 ++++---- 7 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java index 61b35d4..e7b8782 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java @@ -6,10 +6,9 @@ import cat.hack3.codingtests.marsrover.cartography.MarsMap; import java.util.logging.Logger; -public class MarsRover { +public class MarsRover implements RotableRiderRover{ Logger logger = Logger.getLogger(this.getClass().getName()); - enum Rotation {LEFT, RIGHT} private final MarsMap marsMap; private Direction currentDirection; @@ -18,10 +17,12 @@ public class MarsRover { currentDirection = startingDirection; } + @Override public void moveTowards(Direction direction) { marsMap.updatePositionTowards(direction); } + @Override public void rotateTowards(Rotation rotation) { var newDirection = switch (rotation) { case LEFT -> currentDirection.getNextDirectionRotatingMinus90Degrees(); @@ -36,10 +37,12 @@ public class MarsRover { rotation, newDirection)); } + @Override public Coordinates getCurrentCoordinates() { return marsMap.getCurrentPosition(); } + @Override public Direction getCurrentDirection() { return currentDirection; } diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java index c4f53e0..2ce694c 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java @@ -1,14 +1,14 @@ package cat.hack3.codingtests.marsrover; public class MoveBackwardsCommand implements MarsRoverCommand { - private final MarsRover marsRover; + private final RotableRiderRover rover; - public MoveBackwardsCommand(MarsRover marsRover) { - this.marsRover = marsRover; + public MoveBackwardsCommand(RotableRiderRover rover) { + this.rover = rover; } @Override public void execute() { - marsRover.moveTowards(marsRover.getCurrentDirection().reversed()); + rover.moveTowards(rover.getCurrentDirection().reversed()); } } diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java index d0be271..d836437 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java @@ -1,13 +1,13 @@ package cat.hack3.codingtests.marsrover; public class MoveForwardCommand implements MarsRoverCommand{ - private final MarsRover marsRover; + private final RotableRiderRover rover; - public MoveForwardCommand(MarsRover marsRover) { - this.marsRover = marsRover; + public MoveForwardCommand(RotableRiderRover rover) { + this.rover = rover; } public void execute() { - marsRover.moveTowards(marsRover.getCurrentDirection()); + rover.moveTowards(rover.getCurrentDirection()); } } diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java new file mode 100644 index 0000000..edff504 --- /dev/null +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java @@ -0,0 +1,16 @@ +package cat.hack3.codingtests.marsrover; + +import cat.hack3.codingtests.marsrover.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.cartography.Direction; + +public interface RotableRiderRover { + enum Rotation {LEFT, RIGHT} + + void moveTowards(Direction direction); + + void rotateTowards(MarsRover.Rotation rotation); + + Coordinates getCurrentCoordinates(); + + Direction getCurrentDirection(); +} diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java index ddfca68..10ad037 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java @@ -1,14 +1,16 @@ package cat.hack3.codingtests.marsrover; -public class TurnLeftCommand implements MarsRoverCommand{ - private final MarsRover marsRover; +import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.LEFT; - public TurnLeftCommand(MarsRover marsRover) { - this.marsRover = marsRover; +public class TurnLeftCommand implements MarsRoverCommand{ + private final RotableRiderRover rover; + + public TurnLeftCommand(RotableRiderRover rover) { + this.rover = rover; } @Override public void execute() { - marsRover.rotateTowards(MarsRover.Rotation.LEFT); + rover.rotateTowards(LEFT); } } diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java index 4b1738c..f485475 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java @@ -1,14 +1,16 @@ package cat.hack3.codingtests.marsrover; -public class TurnRightCommand implements MarsRoverCommand{ - private final MarsRover marsRover; +import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.RIGHT; - public TurnRightCommand(MarsRover marsRover) { - this.marsRover = marsRover; +public class TurnRightCommand implements MarsRoverCommand{ + private final RotableRiderRover rover; + + public TurnRightCommand(RotableRiderRover rover) { + this.rover = rover; } @Override public void execute() { - marsRover.rotateTowards(MarsRover.Rotation.RIGHT); + rover.rotateTowards(RIGHT); } } diff --git a/mars-station/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/mars-station/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java index 304a722..5bffb3b 100644 --- a/mars-station/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java +++ b/mars-station/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java @@ -14,10 +14,10 @@ import static org.testng.Assert.assertEquals; public class MarsRoverTest { private MarsRover rover; - private MoveForwardCommand moveForwardCommand; - private MoveBackwardsCommand moveBackwardsCommand; - private TurnLeftCommand turnLeftCommand; - private TurnRightCommand turnRightCommand; + private MarsRoverCommand moveForwardCommand; + private MarsRoverCommand moveBackwardsCommand; + private MarsRoverCommand turnLeftCommand; + private MarsRoverCommand turnRightCommand; @BeforeMethod public void setUp() {