From a27ec0af9797e97070ee35c5210aba384321684d Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Sat, 10 Oct 2020 18:33:04 +0200
Subject: [PATCH] Add hierarchical state

---
 src/soon/PlayZustand.java   |  2 +-
 src/soon/PowerOff.java      | 13 +++++++++++++
 src/soon/PowerOn.java       | 13 +++++++++++++
 src/soon/Soon.java          | 36 +++++++++++++++++++++++-------------
 src/soon/SoonTestDrive.java |  4 +++-
 src/soon/StopZustand.java   |  2 +-
 src/soon/Zustand.java       |  6 ++++--
 7 files changed, 58 insertions(+), 18 deletions(-)
 create mode 100644 src/soon/PowerOff.java
 create mode 100644 src/soon/PowerOn.java

diff --git a/src/soon/PlayZustand.java b/src/soon/PlayZustand.java
index 2a74fd6..fc8bf73 100644
--- a/src/soon/PlayZustand.java
+++ b/src/soon/PlayZustand.java
@@ -1,6 +1,6 @@
 package soon;
 
-public class PlayZustand extends Zustand {
+public class PlayZustand extends PowerOn {
 	
 	public PlayZustand(Soon s) {
 		super(s);
diff --git a/src/soon/PowerOff.java b/src/soon/PowerOff.java
new file mode 100644
index 0000000..0bca943
--- /dev/null
+++ b/src/soon/PowerOff.java
@@ -0,0 +1,13 @@
+package soon;
+
+public class PowerOff extends Zustand {
+	
+	public PowerOff(Soon s) {
+		super(s);
+	}
+	
+	public void powerButton() {
+		s.setZustand(s.getStopZustand());
+		System.out.println("Anschalten");
+	}
+}
diff --git a/src/soon/PowerOn.java b/src/soon/PowerOn.java
new file mode 100644
index 0000000..545bd85
--- /dev/null
+++ b/src/soon/PowerOn.java
@@ -0,0 +1,13 @@
+package soon;
+
+public abstract class PowerOn extends Zustand {
+
+	public PowerOn(Soon s) {
+		super(s);
+	}
+	
+	public void powerButton() {
+		s.setZustand(s.getPowerOffZustand());
+		System.out.println("Ausschalten");
+	}
+}
diff --git a/src/soon/Soon.java b/src/soon/Soon.java
index 5e1a693..201c7b6 100644
--- a/src/soon/Soon.java
+++ b/src/soon/Soon.java
@@ -3,13 +3,23 @@ package soon;
 public class Soon {
 	Zustand stopZustand;
 	Zustand playZustand;
+	Zustand powerOffZustand;
 	
 	Zustand zustand;
 	
 	public Soon () {
 		stopZustand = new StopZustand(this);
 		playZustand = new PlayZustand(this);
-		zustand = stopZustand;
+		powerOffZustand = new PowerOff(this);
+		zustand = powerOffZustand;
+	}
+
+	public Zustand getPowerOffZustand() {
+		return powerOffZustand;
+	}
+
+	public void powerButton() {
+		zustand.powerButton();
 	}
 
 	public Zustand getStopZustand() {
@@ -20,6 +30,10 @@ public class Soon {
 		return playZustand;
 	}
 
+	public Zustand getZustand() {
+		return zustand;
+	}
+
 	public void setZustand(Zustand zustand) {
 		this.zustand = zustand;
 	}
@@ -32,18 +46,6 @@ public class Soon {
 		zustand.stopButton();
 	}
 	
-	public void startPlay() {
-		System.out.println("Musik an");
-	}
-	
-	public void stopPlay() {
-		System.out.println("Musik aus");
-	}
-
-	public Zustand getZustand() {
-		return zustand;
-	}
-
 	public void volumeUpButton() {
 		zustand.volumeUpButton();
 	}
@@ -51,7 +53,15 @@ public class Soon {
 	public void volumeDownButton() {
 		zustand.volumeDownButton();
 	}
+
+	public void startPlay() {
+		System.out.println("Musik an");
+	}
 	
+	public void stopPlay() {
+		System.out.println("Musik aus");
+	}
+
 	public void volumeUp() {
 		System.out.println("Lauter");
 	}
diff --git a/src/soon/SoonTestDrive.java b/src/soon/SoonTestDrive.java
index 23c3050..7e3fc47 100644
--- a/src/soon/SoonTestDrive.java
+++ b/src/soon/SoonTestDrive.java
@@ -7,10 +7,12 @@ public class SoonTestDrive {
 		Soon player = new Soon();
 		System.out.println(player);
 		
+		player.powerButton();
 		player.playButton();
 		player.volumeUpButton();
-		player.stopButton();
 		player.volumeDownButton();
+		player.stopButton();
+		player.powerButton();
 	}
 
 }
diff --git a/src/soon/StopZustand.java b/src/soon/StopZustand.java
index 9a9bc12..354c263 100644
--- a/src/soon/StopZustand.java
+++ b/src/soon/StopZustand.java
@@ -1,6 +1,6 @@
 package soon;
 
-public class StopZustand extends Zustand {
+public class StopZustand extends PowerOn {
 	
 	public StopZustand(Soon s) {
 		super(s);
diff --git a/src/soon/Zustand.java b/src/soon/Zustand.java
index 43a6b19..f1ab591 100644
--- a/src/soon/Zustand.java
+++ b/src/soon/Zustand.java
@@ -3,13 +3,15 @@ package soon;
 public abstract class Zustand {
 	protected Soon s;
 
-	public Zustand(Soon s) {
-		this.s = s;
+	public Zustand(Soon k) {
+		this.s = k;
 	}
+
 	public void playButton() {};
 	public void stopButton() {};
 	public void volumeUpButton() {};
 	public void volumeDownButton() {};
 	public void entry() {};
 	public void exit() {};
+	public void powerButton() {};
 }
-- 
GitLab