행동 형 모드 - 상태 모드
6233 단어 디자인 모드
상태 모드 (State Pattern) 에서 클래스 의 행 위 는 상태 에 따라 달라 집 니 다.이런 유형의 디자인 모델 은 행위 형 모델 에 속한다.상태 모드 에서 저 희 는 다양한 상 태 를 나타 내 는 대상 과 행동 이 상태 대상 에 따라 달라 지 는 context 대상 을 만 듭 니 다.
소개 하 다.
의도
대상 이 내부 상태 가 바 뀌 었 을 때 행동 을 바 꿀 수 있 도록 허용 합 니 다. 대상 이 종 류 를 수정 한 것 처럼 보 입 니 다.
주요 해결
대상 의 행 위 는 상태 (속성) 에 의존 하고 그 상태 에 따라 관련 행 위 를 바 꿀 수 있다.
언제
코드 에는 대상 상태 와 관련 된 조건문 이 대량으로 포함 되 어 있다.
어떻게 해결 합 니까?
각종 구체 적 인 상태 류 를 추상 화하 다.
키 코드
보통 명령 모드 의 인터페이스 에는 방법 이 하나 밖 에 없다.상태 모드 의 인터페이스 에는 하나 이상 의 방법 이 있다.그리고 상태 모드 의 실현 클래스 의 방법 은 일반적으로 값 을 되 돌려 주거 나 실례 변수의 값 을 바꾼다.상태 패턴 은 일반적으로 대상 의 상태 와 관련 이 있다 는 것 이다.클래스 를 실현 하 는 방법 은 서로 다른 기능 을 가지 고 인터페이스 에 덮어 쓰 는 방법 이 있다.상태 모드 는 명령 모드 와 마찬가지 로 if.. else 등 조건 선택 문 구 를 제거 하 는 데 도 사용 할 수 있 습 니 다.
응용 실례
장점.
필드 사용
행위 가 상태 에 제약 을 받 을 때 상태 모드 를 사용 하고 상태 가 5 개 를 넘 지 않 는 다.
Demo
State 인 터 페 이 스 를 만 들 고 State 인 터 페 이 스 를 실현 하 는 실체 상태 클래스 를 만 들 것 입 니 다.Context 는 어떤 상 태 를 가 진 클래스 입 니 다.StatePatternDemo, 우리 의 프 리 젠 테 이 션 클래스 는 Context 와 상태 대상 을 사용 하여 Context 가 상태 가 바 뀌 었 을 때의 행동 변 화 를 보 여 줍 니 다.
인터페이스 만 들 기
public interface State {
public void doAction(Context context);
}
인터페이스 구현 실체 클래스 만 들 기
public class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
public String toString(){
return "Start State";
}
}
public class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
public String toString(){
return "Stop State";
}
}
Context 클래스 만 들 기
public class Context {
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
상태 State 가 바 뀌 었 을 때의 행동 변 화 를 Context 로 확인 합 니 다.
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
System.out.println(context.getState().toString());
StopState stopState = new StopState();
stopState.doAction(context);
System.out.println(context.getState().toString());
}
}
출력 검증
Player is in start state
Start State
Player is in stop state
Stop State
총결산
상태 모드 는 각 상태 에 대응 하 는 조작 을 분리 한다. 즉, 서로 다른 상태 에 대해 서로 다른 하위 클래스 에서 구체 적 인 조작 을 실현 하고 서로 다른 상태의 전환 은 하위 클래스 에서 이 루어 진다. 예 를 들 어 위의 demo 는 똑 같이 doAction 이 서로 다른 상태 에 따라 서로 다른 논 리 를 집행 하고 전통 적 인 방법 에 따라 if else 를 사용 하여 판단 해 야 한다.그러나 상태 모드 를 사용 하면 서로 다른 상 태 를 서로 다른 하위 클래스 로 예화 한 다음 에 서로 다른 하위 클래스 (실제 서로 다른 상태) 에서 서로 다른 논 리 를 실현 할 수 있다. 클 라 이언 트 가 사용 할 때 서로 다른 상태의 하위 클래스 만 예화 하면 서로 다른 상태 에서 의 동명 방법 을 호출 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.