From 2a463af794f07795c4a97d2d7d7e9154a6f2c79c Mon Sep 17 00:00:00 2001 From: Julien Lengrand-Lambert Date: Thu, 26 Mar 2020 16:27:26 +0100 Subject: [PATCH] Add undo capability --- .../java/nl/lengrand/patterns/command/Command.java | 1 + .../nl/lengrand/patterns/command/EmptyCommand.java | 5 +++++ .../java/nl/lengrand/patterns/command/LightOff.java | 5 +++++ .../java/nl/lengrand/patterns/command/LightOn.java | 6 ++++++ .../nl/lengrand/patterns/command/RemoteControl.java | 13 ++++++++++++- 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/nl/lengrand/patterns/command/Command.java b/src/main/java/nl/lengrand/patterns/command/Command.java index f82a521..b18e69c 100644 --- a/src/main/java/nl/lengrand/patterns/command/Command.java +++ b/src/main/java/nl/lengrand/patterns/command/Command.java @@ -4,4 +4,5 @@ public interface Command { void execute(); + void undo(); } diff --git a/src/main/java/nl/lengrand/patterns/command/EmptyCommand.java b/src/main/java/nl/lengrand/patterns/command/EmptyCommand.java index 67890ca..2a6266c 100644 --- a/src/main/java/nl/lengrand/patterns/command/EmptyCommand.java +++ b/src/main/java/nl/lengrand/patterns/command/EmptyCommand.java @@ -5,4 +5,9 @@ public class EmptyCommand implements Command{ public void execute() { System.out.println("No Command"); } + + @Override + public void undo() { + System.out.println("No Command undo"); + } } diff --git a/src/main/java/nl/lengrand/patterns/command/LightOff.java b/src/main/java/nl/lengrand/patterns/command/LightOff.java index 7ff0f9a..66974c6 100644 --- a/src/main/java/nl/lengrand/patterns/command/LightOff.java +++ b/src/main/java/nl/lengrand/patterns/command/LightOff.java @@ -14,4 +14,9 @@ public class LightOff implements Command { public void execute() { light.off(); } + + @Override + public void undo() { + light.on(); + } } diff --git a/src/main/java/nl/lengrand/patterns/command/LightOn.java b/src/main/java/nl/lengrand/patterns/command/LightOn.java index ae79e00..0d1adbc 100644 --- a/src/main/java/nl/lengrand/patterns/command/LightOn.java +++ b/src/main/java/nl/lengrand/patterns/command/LightOn.java @@ -14,4 +14,10 @@ public class LightOn implements Command { public void execute() { light.on(); } + + @Override + public void undo() { + light.off(); + } + } diff --git a/src/main/java/nl/lengrand/patterns/command/RemoteControl.java b/src/main/java/nl/lengrand/patterns/command/RemoteControl.java index e1eeb52..8e756f6 100644 --- a/src/main/java/nl/lengrand/patterns/command/RemoteControl.java +++ b/src/main/java/nl/lengrand/patterns/command/RemoteControl.java @@ -8,13 +8,20 @@ import java.util.Map; public class RemoteControl { private Map commands = new HashMap<>(); + private Command lastCommand = new EmptyCommand(); public void addCommand(String commandName, Command command){ commands.put(commandName, command); } public void pressCommand(String commandName){ - commands.getOrDefault(commandName, new EmptyCommand()).execute(); + Command command = commands.getOrDefault(commandName, new EmptyCommand()); + command.execute(); + lastCommand = command; + } + + public void undo(){ + lastCommand.undo(); } @Override @@ -33,6 +40,10 @@ public class RemoteControl { System.out.println(rc); rc.pressCommand("BathroomLightOn"); + rc.undo(); + rc.pressCommand("BathroomLightOff"); + rc.undo(); + rc.undo(); rc.pressCommand("Null check"); } }