상세 컨텐츠

본문 제목

State Pattern

Java

by techbard 2016. 7. 19. 21:46

본문

반응형

State.zip



# 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 이벤트 발생


반응형

관련글 더보기

댓글 영역