"상태 패턴"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-== 참고 자료 == +==참고==))
72번째 줄: 72번째 줄:
*[[디자인 패턴]]
*[[디자인 패턴]]


==참고 자료==
==참고==
*http://en.wikipedia.org/wiki/State_pattern
*http://en.wikipedia.org/wiki/State_pattern


[[분류: 디자인 패턴]]
[[분류: 디자인 패턴]]

2017년 6월 27일 (화) 14:03 판

1 개요

state pattern, objects for states pattern
스테이트 패턴
  • 상태를 클래스로 표현하는 구조
  • 객체의 상태를 표현하기 위해서 이용되는 디자인 패턴

State Design Pattern UML Class Diagram.svg

2 예제

interface State { 
        void writeName(StateContext stateContext, String name);
} 
 
class StateA implements State { 
        public void writeName(StateContext stateContext, String name) { 
                System.out.println(name.toLowerCase()); 
                stateContext.setState(new StateB()); 
        } 
} 
 
class StateB implements State { 
        private int count=0; 
        public void writeName(StateContext stateContext, String name){ 
                System.out.println(name.toUpperCase()); 
                // StateBのwriteName()が2度呼び出された後に状態を変化させる
                if(++count>1) { 
                        stateContext.setState(new StateA()); 
                }
        }
}
public class StateContext {
        private State myState; 
        public StateContext() { 
                setState(new StateA()); 
        } 
 
        public void setState(State newState) { 
                this.myState = newState; 
        }
 
        public void writeName(String name) { 
                this.myState.writeName(this, name); 
        } 
}
public class TestClientState { 
        public static void main(String[] args) { 
                StateContext sc = new StateContext(); 
                sc.writeName("Monday"); 
                sc.writeName("Tuesday"); 
                sc.writeName("Wednesday"); 
                sc.writeName("Thursday"); 
                sc.writeName("Saturday"); 
                sc.writeName("Sunday"); 
        }
}
// monday
// TUESDAY
// WEDNESDAY
// thursday
// SATURDAY
// SUNDAY

3 같이 보기

4 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}