less than 1 minute read

★상태 패턴 : 상태를 객체로 나타내고, 행동을 구현한다.

★스트레터지 패턴이랑 크게 다를게 없으나 스트레터지 패턴은 알고리즘을 변경시키고, 알고리즘에서 구현된 행동이 상태에 영향을 주지는 않지만 스테이트 패턴은 어떤 이벤트로 인해 상태를 변화시키고, 상태에 영향을 준다.

★예를 들어 불이 꺼진 상태와 켜진 상태를 두고, 스위치를 눌렀을 때 일어나는 일을 상태별로 구현할 수 있다. 마치 인프런 예제처럼.

★Test

  1. 상태를 정의할 인터페이스를 만든다.
interface LightState {
	void on();
	void off();
}
  1. 객체의 멤버로 상태를 두고, 상태에 따라 객체의 행동을 결정하도록 구현한다.
public class Light {
	
	protected LightState lightState;
	
	private LightState offState = new LightState() {
		
		@Override
		public void on() {
			System.out.println("Light ON");
			lightState = onState;
		}
		
		@Override
		public void off() {
			System.out.println("Nothing");
		}
	};
	
	private LightState onState = new LightState() {
		
		@Override
		public void on() {
			System.out.println("Nothing");
		}
		
		@Override
		public void off() {
			System.out.println("Light OFF");
			lightState = offState;
		}
	};
	
	
	public Light() {
		lightState = offState;
	}
	
	public void on() {
		lightState.on();
	}
	
	public void off() {
		lightState.off();
	}
}
  1. 불을 껏다 켰다 해본다.
public class Main {
	public static void main(String[] args) {
		Light light = new Light();
		light.off();
		light.off();
		light.off();
		
		light.on();
		light.on();
		light.on();
		
		light.off();
		light.on();
		light.off();
		light.on();
		light.off();
		light.on();
	}
}

Categories:

Updated: