Design-Patterns-For-Beginners icon indicating copy to clipboard operation
Design-Patterns-For-Beginners copied to clipboard

Modifing exumple

Open nenadbulatovic opened this issue 7 years ago • 0 comments

Please consider this modification to your example:

package com.in28minutes.patterns;

public class StatePattern {
	static class FanWallControl {
		private SpeedLevel current;

		public FanWallControl() {
			current = new Off();
		}

		public void set_state(SpeedLevel state) {
			current = state;
			System.out.println("Switching to: " +  current.getClass().getSimpleName());
		}

		public void rotate() {
			current.rotate(this);
		}

		@Override
		public String toString() {
			return String.format("FanWallControl [current=%s]", current);
		}
	}

	interface SpeedLevel {
		void rotate(FanWallControl fanWallControl);
	}

	static class Off implements SpeedLevel {
		public void rotate(FanWallControl fanWallControl) {
			fanWallControl.set_state(new SpeedLevel1());
		}
	}

	static class SpeedLevel1 implements SpeedLevel {
		public void rotate(FanWallControl fanWallControl) {
			fanWallControl.set_state(new SpeedLevel2());
		}
	}

	static class SpeedLevel2 implements SpeedLevel {
		public void rotate(FanWallControl fanWallControl) {
			fanWallControl.set_state(new SpeedLevel3());
		}
	}

	static class SpeedLevel3 implements SpeedLevel {
		public void rotate(FanWallControl fanWallControl) {
			fanWallControl.set_state(new Off());
		}
	}

	public static void main(String[] args) {
		FanWallControl fanControl = new FanWallControl();
		System.out.println("Current state: " + fanControl.current.getClass().getSimpleName());
		fanControl.rotate();
		System.out.println("Current state: " + fanControl.current.getClass().getSimpleName());
		fanControl.rotate();
		System.out.println("Current state: " + fanControl.current.getClass().getSimpleName());
		fanControl.rotate();
		System.out.println("Current state: " + fanControl.current.getClass().getSimpleName());
		fanControl.rotate();
	}
}

nenadbulatovic avatar Apr 28 '17 19:04 nenadbulatovic