티스토리 뷰

Java

State Pattern

techbard 2016.07.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 이벤트 발생


댓글
댓글쓰기 폼
공지사항
Total
394,934
Today
5
Yesterday
28
«   2018/11   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
글 보관함