From e34ce7b3d3c7e038612a106a4846b3c7acbcad91 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Sat, 10 Oct 2020 18:39:50 +0200 Subject: [PATCH] Add concurrent composite states --- src/soon/PlayZustand.java | 6 +- ...PowerOnZustand.java => PlayerZustand.java} | 4 +- src/soon/PowerOff.java | 2 +- src/soon/PowerOn.java | 66 ++++++++++++++----- src/soon/Soon.java | 28 ++++++-- src/soon/SoonTestDrive.java | 4 ++ src/soon/SpeakerZustand.java | 13 ++++ src/soon/StereoZustand.java | 13 ++++ src/soon/StopZustand.java | 6 +- src/soon/SurroundZustand.java | 14 ++++ src/soon/Zustand.java | 1 + 11 files changed, 125 insertions(+), 32 deletions(-) rename src/soon/{PowerOnZustand.java => PlayerZustand.java} (75%) create mode 100644 src/soon/SpeakerZustand.java create mode 100644 src/soon/StereoZustand.java create mode 100644 src/soon/SurroundZustand.java diff --git a/src/soon/PlayZustand.java b/src/soon/PlayZustand.java index beddd6c..b952b8d 100644 --- a/src/soon/PlayZustand.java +++ b/src/soon/PlayZustand.java @@ -1,6 +1,6 @@ package soon; -public class PlayZustand extends PowerOnZustand { +public class PlayZustand extends PlayerZustand { public PlayZustand(Soon s, PowerOn p) { super(s, p); @@ -8,8 +8,8 @@ public class PlayZustand extends PowerOnZustand { public void stopButton() { exit(); - p.setZustand(p.getStopZustand()); - p.getZustand().entry(); + p.setPlayerZustand(p.getStopZustand()); + p.getPlayerZustand().entry(); } public void volumeUpButton() { diff --git a/src/soon/PowerOnZustand.java b/src/soon/PlayerZustand.java similarity index 75% rename from src/soon/PowerOnZustand.java rename to src/soon/PlayerZustand.java index 36589af..e531283 100644 --- a/src/soon/PowerOnZustand.java +++ b/src/soon/PlayerZustand.java @@ -1,10 +1,10 @@ package soon; -public abstract class PowerOnZustand { +public abstract class PlayerZustand { Soon s; PowerOn p; - public PowerOnZustand(Soon s, PowerOn p) { + public PlayerZustand(Soon s, PowerOn p) { this.s = s; this.p = p; } diff --git a/src/soon/PowerOff.java b/src/soon/PowerOff.java index d4e26c4..8ce64a8 100644 --- a/src/soon/PowerOff.java +++ b/src/soon/PowerOff.java @@ -7,9 +7,9 @@ public class PowerOff extends Zustand { } public void powerButton() { + System.out.println("Power Button: Anschalten"); exit(); s.setZustand(s.getPowerOnZustand()); - System.out.println("Anschalten"); s.getZustand().entry(); } } diff --git a/src/soon/PowerOn.java b/src/soon/PowerOn.java index fc3ab60..14a141a 100644 --- a/src/soon/PowerOn.java +++ b/src/soon/PowerOn.java @@ -1,64 +1,96 @@ package soon; public class PowerOn extends Zustand { - PowerOnZustand playZustand; - PowerOnZustand stopZustand; + PlayerZustand playZustand; + PlayerZustand stopZustand; + SpeakerZustand stereoZustand; + SpeakerZustand surroundZustand; - PowerOnZustand zustand; + PlayerZustand playerZustand; + SpeakerZustand speakerZustand; public PowerOn(Soon s) { super(s); stopZustand = new StopZustand(s, this); playZustand = new PlayZustand(s, this); - zustand = stopZustand; + stereoZustand = new StereoZustand(s,this); + surroundZustand = new SurroundZustand(s,this); + playerZustand = stopZustand; + speakerZustand = stereoZustand; } - public PowerOnZustand getStopZustand() { + public PlayerZustand getStopZustand() { return stopZustand; } - public PowerOnZustand getPlayZustand() { + public PlayerZustand getPlayZustand() { return playZustand; } - public PowerOnZustand getZustand() { - return zustand; + public SpeakerZustand getStereoZustand() { + return stereoZustand; + } + + public SpeakerZustand getSurroundZustand() { + return surroundZustand; + } + + public PlayerZustand getPlayerZustand() { + return playerZustand; } - public void setZustand(PowerOnZustand zustand) { - this.zustand = zustand; + public void setPlayerZustand(PlayerZustand zustand) { + this.playerZustand = zustand; } + public SpeakerZustand getSpeakerZustand() { + return speakerZustand; + } + + public void setSpeakerZustand(SpeakerZustand zustand) { + this.speakerZustand = zustand; + } + public void playButton() { - zustand.playButton(); + System.out.println("Play Button"); + playerZustand.playButton(); } public void stopButton() { - zustand.stopButton(); + System.out.println("Stop Button"); + playerZustand.stopButton(); } public void volumeUpButton() { - zustand.volumeUpButton(); + System.out.println("Volume Up Button"); + playerZustand.volumeUpButton(); } public void volumeDownButton() { - zustand.volumeDownButton(); + System.out.println("Volume Down Button"); + playerZustand.volumeDownButton(); } public void powerButton() { + System.out.println("Power Button: Ausschalten"); exit(); s.setZustand(s.getPowerOffZustand()); - System.out.println("Ausschalten"); s.getZustand().entry(); } + public void speakerButton() { + System.out.println("Speaker Button"); + speakerZustand.speakerButton(); + } + + public void entry() { s.powerLED_On(); - zustand.entry(); + playerZustand.entry(); } public void exit() { s.powerLED_Off(); - zustand.exit(); + playerZustand.exit(); } } diff --git a/src/soon/Soon.java b/src/soon/Soon.java index d03e0df..09822b9 100644 --- a/src/soon/Soon.java +++ b/src/soon/Soon.java @@ -3,12 +3,16 @@ package soon; public class Soon { Zustand powerOnZustand; Zustand powerOffZustand; + PlayerZustand playerHistory; + SpeakerZustand speakerHistory; Zustand zustand; public Soon () { powerOnZustand = new PowerOn(this); powerOffZustand = new PowerOff(this); + playerHistory = ((PowerOn)powerOnZustand).getStopZustand(); + speakerHistory = ((PowerOn)powerOnZustand).getStereoZustand(); zustand = powerOffZustand; } @@ -48,30 +52,42 @@ public class Soon { zustand.powerButton(); } + public void speakerButton() { + zustand.speakerButton(); + } + public void startPlay() { - System.out.println("Musik an"); + System.out.println("Soon: Musik an"); } public void stopPlay() { - System.out.println("Musik aus"); + System.out.println("Soon: Musik aus"); } public void volumeUp() { - System.out.println("Lauter"); + System.out.println("Soon: Lauter"); } public void volumeDown() { - System.out.println("Leiser"); + System.out.println("Soon: Leiser"); } public void powerLED_On() { - System.out.println("LED on"); + System.out.println("Soon: LED on"); } public void powerLED_Off() { - System.out.println("LED off"); + System.out.println("Soon: LED off"); } + public void setStereo() { + System.out.println("Soon: Stereo sound"); + } + + public void setSurround() { + System.out.println("Soon: Surround sound"); + } + public String toString() { StringBuffer result = new StringBuffer(); result.append("\nSoon MP3 Player"); diff --git a/src/soon/SoonTestDrive.java b/src/soon/SoonTestDrive.java index 7e3fc47..0e92076 100644 --- a/src/soon/SoonTestDrive.java +++ b/src/soon/SoonTestDrive.java @@ -9,8 +9,12 @@ public class SoonTestDrive { player.powerButton(); player.playButton(); + player.speakerButton(); player.volumeUpButton(); + player.powerButton(); + player.powerButton(); player.volumeDownButton(); + player.speakerButton(); player.stopButton(); player.powerButton(); } diff --git a/src/soon/SpeakerZustand.java b/src/soon/SpeakerZustand.java new file mode 100644 index 0000000..9177d8d --- /dev/null +++ b/src/soon/SpeakerZustand.java @@ -0,0 +1,13 @@ +package soon; + +public abstract class SpeakerZustand { + Soon s; + PowerOn p; + + public SpeakerZustand(Soon s, PowerOn p) { + this.s = s; + this.p = p; + } + + public void speakerButton() {}; +} diff --git a/src/soon/StereoZustand.java b/src/soon/StereoZustand.java new file mode 100644 index 0000000..8cb292a --- /dev/null +++ b/src/soon/StereoZustand.java @@ -0,0 +1,13 @@ +package soon; + +public class StereoZustand extends SpeakerZustand { + + public StereoZustand(Soon s, PowerOn p) { + super(s, p); + } + + public void speakerButton() { + s.setSurround(); + p.setSpeakerZustand(p.getSurroundZustand()); + } +} diff --git a/src/soon/StopZustand.java b/src/soon/StopZustand.java index 67cf428..92308a0 100644 --- a/src/soon/StopZustand.java +++ b/src/soon/StopZustand.java @@ -1,6 +1,6 @@ package soon; -public class StopZustand extends PowerOnZustand { +public class StopZustand extends PlayerZustand { public StopZustand(Soon s, PowerOn p) { super(s, p); @@ -8,7 +8,7 @@ public class StopZustand extends PowerOnZustand { public void playButton() { exit(); - p.setZustand(p.getPlayZustand()); - p.getZustand().entry(); + p.setPlayerZustand(p.getPlayZustand()); + p.getPlayerZustand().entry(); } } diff --git a/src/soon/SurroundZustand.java b/src/soon/SurroundZustand.java new file mode 100644 index 0000000..a60d3f6 --- /dev/null +++ b/src/soon/SurroundZustand.java @@ -0,0 +1,14 @@ +package soon; + +public class SurroundZustand extends SpeakerZustand { + + public SurroundZustand(Soon s, PowerOn p) { + super(s, p); + } + + public void speakerButton() { + s.setStereo(); + p.setSpeakerZustand(p.getStereoZustand()); + } + +} diff --git a/src/soon/Zustand.java b/src/soon/Zustand.java index 8a7d896..4bdbadb 100644 --- a/src/soon/Zustand.java +++ b/src/soon/Zustand.java @@ -14,4 +14,5 @@ public abstract class Zustand { public void entry() {}; public void exit() {}; public void powerButton() {}; + public void speakerButton() {}; } -- GitLab