Skip to content
Snippets Groups Projects
Commit e34ce7b3 authored by Peter Hertkorn's avatar Peter Hertkorn
Browse files

Add concurrent composite states

parent b8b121c1
Branches
No related tags found
No related merge requests found
package soon; package soon;
public class PlayZustand extends PowerOnZustand { public class PlayZustand extends PlayerZustand {
public PlayZustand(Soon s, PowerOn p) { public PlayZustand(Soon s, PowerOn p) {
super(s, p); super(s, p);
...@@ -8,8 +8,8 @@ public class PlayZustand extends PowerOnZustand { ...@@ -8,8 +8,8 @@ public class PlayZustand extends PowerOnZustand {
public void stopButton() { public void stopButton() {
exit(); exit();
p.setZustand(p.getStopZustand()); p.setPlayerZustand(p.getStopZustand());
p.getZustand().entry(); p.getPlayerZustand().entry();
} }
public void volumeUpButton() { public void volumeUpButton() {
......
package soon; package soon;
public abstract class PowerOnZustand { public abstract class PlayerZustand {
Soon s; Soon s;
PowerOn p; PowerOn p;
public PowerOnZustand(Soon s, PowerOn p) { public PlayerZustand(Soon s, PowerOn p) {
this.s = s; this.s = s;
this.p = p; this.p = p;
} }
......
...@@ -7,9 +7,9 @@ public class PowerOff extends Zustand { ...@@ -7,9 +7,9 @@ public class PowerOff extends Zustand {
} }
public void powerButton() { public void powerButton() {
System.out.println("Power Button: Anschalten");
exit(); exit();
s.setZustand(s.getPowerOnZustand()); s.setZustand(s.getPowerOnZustand());
System.out.println("Anschalten");
s.getZustand().entry(); s.getZustand().entry();
} }
} }
package soon; package soon;
public class PowerOn extends Zustand { public class PowerOn extends Zustand {
PowerOnZustand playZustand; PlayerZustand playZustand;
PowerOnZustand stopZustand; PlayerZustand stopZustand;
SpeakerZustand stereoZustand;
SpeakerZustand surroundZustand;
PowerOnZustand zustand; PlayerZustand playerZustand;
SpeakerZustand speakerZustand;
public PowerOn(Soon s) { public PowerOn(Soon s) {
super(s); super(s);
stopZustand = new StopZustand(s, this); stopZustand = new StopZustand(s, this);
playZustand = new PlayZustand(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; return stopZustand;
} }
public PowerOnZustand getPlayZustand() { public PlayerZustand getPlayZustand() {
return playZustand; return playZustand;
} }
public PowerOnZustand getZustand() { public SpeakerZustand getStereoZustand() {
return zustand; return stereoZustand;
} }
public void setZustand(PowerOnZustand zustand) { public SpeakerZustand getSurroundZustand() {
this.zustand = zustand; return surroundZustand;
}
public PlayerZustand getPlayerZustand() {
return playerZustand;
}
public void setPlayerZustand(PlayerZustand zustand) {
this.playerZustand = zustand;
}
public SpeakerZustand getSpeakerZustand() {
return speakerZustand;
}
public void setSpeakerZustand(SpeakerZustand zustand) {
this.speakerZustand = zustand;
} }
public void playButton() { public void playButton() {
zustand.playButton(); System.out.println("Play Button");
playerZustand.playButton();
} }
public void stopButton() { public void stopButton() {
zustand.stopButton(); System.out.println("Stop Button");
playerZustand.stopButton();
} }
public void volumeUpButton() { public void volumeUpButton() {
zustand.volumeUpButton(); System.out.println("Volume Up Button");
playerZustand.volumeUpButton();
} }
public void volumeDownButton() { public void volumeDownButton() {
zustand.volumeDownButton(); System.out.println("Volume Down Button");
playerZustand.volumeDownButton();
} }
public void powerButton() { public void powerButton() {
System.out.println("Power Button: Ausschalten");
exit(); exit();
s.setZustand(s.getPowerOffZustand()); s.setZustand(s.getPowerOffZustand());
System.out.println("Ausschalten");
s.getZustand().entry(); s.getZustand().entry();
} }
public void speakerButton() {
System.out.println("Speaker Button");
speakerZustand.speakerButton();
}
public void entry() { public void entry() {
s.powerLED_On(); s.powerLED_On();
zustand.entry(); playerZustand.entry();
} }
public void exit() { public void exit() {
s.powerLED_Off(); s.powerLED_Off();
zustand.exit(); playerZustand.exit();
} }
} }
...@@ -3,12 +3,16 @@ package soon; ...@@ -3,12 +3,16 @@ package soon;
public class Soon { public class Soon {
Zustand powerOnZustand; Zustand powerOnZustand;
Zustand powerOffZustand; Zustand powerOffZustand;
PlayerZustand playerHistory;
SpeakerZustand speakerHistory;
Zustand zustand; Zustand zustand;
public Soon () { public Soon () {
powerOnZustand = new PowerOn(this); powerOnZustand = new PowerOn(this);
powerOffZustand = new PowerOff(this); powerOffZustand = new PowerOff(this);
playerHistory = ((PowerOn)powerOnZustand).getStopZustand();
speakerHistory = ((PowerOn)powerOnZustand).getStereoZustand();
zustand = powerOffZustand; zustand = powerOffZustand;
} }
...@@ -48,28 +52,40 @@ public class Soon { ...@@ -48,28 +52,40 @@ public class Soon {
zustand.powerButton(); zustand.powerButton();
} }
public void speakerButton() {
zustand.speakerButton();
}
public void startPlay() { public void startPlay() {
System.out.println("Musik an"); System.out.println("Soon: Musik an");
} }
public void stopPlay() { public void stopPlay() {
System.out.println("Musik aus"); System.out.println("Soon: Musik aus");
} }
public void volumeUp() { public void volumeUp() {
System.out.println("Lauter"); System.out.println("Soon: Lauter");
} }
public void volumeDown() { public void volumeDown() {
System.out.println("Leiser"); System.out.println("Soon: Leiser");
} }
public void powerLED_On() { public void powerLED_On() {
System.out.println("LED on"); System.out.println("Soon: LED on");
} }
public void powerLED_Off() { 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() { public String toString() {
......
...@@ -9,8 +9,12 @@ public class SoonTestDrive { ...@@ -9,8 +9,12 @@ public class SoonTestDrive {
player.powerButton(); player.powerButton();
player.playButton(); player.playButton();
player.speakerButton();
player.volumeUpButton(); player.volumeUpButton();
player.powerButton();
player.powerButton();
player.volumeDownButton(); player.volumeDownButton();
player.speakerButton();
player.stopButton(); player.stopButton();
player.powerButton(); player.powerButton();
} }
......
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() {};
}
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());
}
}
package soon; package soon;
public class StopZustand extends PowerOnZustand { public class StopZustand extends PlayerZustand {
public StopZustand(Soon s, PowerOn p) { public StopZustand(Soon s, PowerOn p) {
super(s, p); super(s, p);
...@@ -8,7 +8,7 @@ public class StopZustand extends PowerOnZustand { ...@@ -8,7 +8,7 @@ public class StopZustand extends PowerOnZustand {
public void playButton() { public void playButton() {
exit(); exit();
p.setZustand(p.getPlayZustand()); p.setPlayerZustand(p.getPlayZustand());
p.getZustand().entry(); p.getPlayerZustand().entry();
} }
} }
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());
}
}
...@@ -14,4 +14,5 @@ public abstract class Zustand { ...@@ -14,4 +14,5 @@ public abstract class Zustand {
public void entry() {}; public void entry() {};
public void exit() {}; public void exit() {};
public void powerButton() {}; public void powerButton() {};
public void speakerButton() {};
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment