# IState.java
public interface IState {
IState s1();
IState s2();
IState s3();
}
# S1.java
public class S1 implements IState {
@Override
public IState s1() {
System.out.println("같은 S1 상태 반복");
return this;
}
@Override
public IState s2() {
System.out.println("A 이벤트 발생");
return new S2();
}
@Override
public IState s3() {
System.out.println("E 이벤트 발생");
return new S3();
}
}
# S2.java
public class S2 implements IState {
@Override
public IState s1() {
System.out.println("C 이벤트 발생");
return new S1();
}
@Override
public IState s2() {
System.out.println("같은 S2 상태 반복");
return this;
}
@Override
public IState s3() {
System.out.println("B 이벤트 발생");
return new S3();
}
}
# S3.java
public class S3 implements IState {
@Override
public IState s1() {
System.out.println("가능하지 않은 상태 전이");
return this;
}
@Override
public IState s2() {
System.out.println("D 이벤트 발생");
return new S2();
}
@Override
public IState s3() {
System.out.println("같은 S3 상태 반복");
return this;
}
}
public class StateManager {
private IState state;
public StateManager(IState state) {
this.state = state;
}
public void s1() {
this.state = state.s1();
}
public void s2() {
this.state = state.s2();
}
public void s3() {
this.state = state.s3();
}
}
# Main.java
public class Main {
public static void main(String[] args) {
StateManager sm = new StateManager(new S1());
sm.s2();
sm.s3();
sm.s2();
sm.s1();
sm.s3();
}
}
# 결과
A 이벤트 발생
B 이벤트 발생
D 이벤트 발생
C 이벤트 발생
E 이벤트 발생
댓글 영역