자바 디자인 모드 를 괴 롭 히 는 상태 모드
상태 모드
상태 모드 (State Pattern) 에서 클래스 의 행 위 는 상태 에 따라 달라 집 니 다.이런 유형의 디자인 모델 은 행위 형 모델 에 속한다.상태 모드 에서 저 희 는 다양한 상 태 를 나타 내 는 대상 과 행동 이 상태 대상 에 따라 달라 지 는 context 대상 을 만 듭 니 다.통속 적 인 점 은 대상 이 내부 상태 가 바 뀔 때 그 행동 을 바 꾸 는 것 이다.
소개 하 다.
대상 이 내부 상태 가 바 뀌 었 을 때 행동 을 바 꾸 도록 허용 하려 는 의 도 는 대상 이 종 류 를 수정 한 것 처럼 보인다.
주요 해결 대상 의 행 위 는 그 상태 (속성) 에 의존 하고 그 상태 에 따라 관련 행 위 를 바 꿀 수 있다.
코드 에 대상 상태 와 관련 된 조건 문 구 를 대량으로 포함 할 때 사용 합 니까?
어떻게 해결 해 야 각종 구체 적 인 상태 류 를 추상 화 할 수 있 습 니까?
키 코드 는 보통 명령 모드 의 인터페이스 에 방법 이 하나 밖 에 없다.상태 모드 의 인터페이스 에는 하나 이상 의 방법 이 있다.그리고 상태 모드 의 실현 클래스 의 방법 은 일반적으로 값 을 되 돌려 주거 나 실례 변수의 값 을 바꾼다.상태 패턴 은 일반적으로 대상 의 상태 와 관련 이 있다 는 것 이다.클래스 를 실현 하 는 방법 은 서로 다른 기능 을 가지 고 인터페이스 에 덮어 쓰 는 방법 이 있다.상태 모드 는 명령 모드 와 마찬가지 로 if.. else 등 조건 선택 문 구 를 제거 하 는 데 도 사용 할 수 있 습 니 다.
UML 그림
주요 역할
1) Context (환경 류): 환경 류 는 다양한 상태의 대상 을 가지 고 외부 에서 사용 하 는 인터페이스 로 상태 류 인 터 페 이 스 를 호출 합 니 다.
2) State (추상 상태): 추상 상 태 는 추상 류 일 수도 있 고 인터페이스 로 직접 정의 할 수도 있다.주로 상태 추상 적 인 방법 을 정의 하고 구체 적 으로 하위 클래스 에 의 해 책임 을 진다.
3) Concrete State (구체 적 인 상태 류): 구체 적 인 상태 류 는 추상 적 인 상태의 실현 자 이 고 서로 다른 상태 류 는 이런 서로 다른 상태 에 대응 하 며 그 내부 실현 도 다르다.환경 류 에서 서로 다른 상태의 대상 을 사용 할 때 서로 다른 처리 논 리 를 실현 할 수 있다.
응용 실례
1. 농 구 를 할 때 운동 선 수 는 정상 상태, 비정 상 상태 와 비정상적인 상 태 를 가 질 수 있다.
2. 증후 을 편종 에서 '종 은 추상 적 인 인터페이스', '종 A' 등 은 구체 적 인 상태 이 고 '증후 을 편종' 은 구체 적 인 환경 (Context) 이다.
장점.
1. 전환 규칙 을 봉인 했다.
2. 가능 한 상 태 를 매 거 하기 전에 상태 종 류 를 확인 해 야 합 니 다.
3. 특정한 상태 와 관련 된 모든 행 위 를 하나의 유형 에 넣 고 새로운 상 태 를 편리 하 게 추가 할 수 있 으 며 대상 의 상 태 를 바 꾸 기만 하면 대상 의 행 위 를 바 꿀 수 있다.
4. 상태 전환 논리 와 상태 대상 을 하나 로 합성 하 는 것 을 허용 합 니 다. 커 다란 조건 문 블록 이 아 닙 니 다.
5. 여러 환경 대상 이 하나의 상태 대상 을 공유 하도록 하여 시스템 에서 대상 의 개 수 를 줄 일 수 있다.
결점.
1. 상태 모드 의 사용 은 반드시 시스템 류 와 대상 의 개 수 를 증가 시 킬 것 이다.
2. 상태 모델 의 구조 와 실현 이 비교적 복잡 하고 잘못 사용 하면 프로그램 구조 와 코드 의 혼란 을 초래 할 수 있다.
3. 상태 모드 는 '개폐 원칙' 에 대한 지원 이 좋 지 않 습 니 다. 상 태 를 전환 할 수 있 는 상태 모드 에 대해 새로운 상태 클래스 를 추가 하려 면 상태 전환 을 담당 하 는 소스 코드 를 수정 해 야 합 니 다. 그렇지 않 으 면 새로 추 가 된 상태 로 전환 할 수 없고 특정한 상태 클래스 의 행 위 를 수정 할 때 도 해당 하 는 소스 코드 를 수정 해 야 합 니 다.
필드 사용
상태 모드 와 정책 모드 의 대비
지금 우 리 는 상태 모델 과 전략 모델 의 구조 가 비슷 하 다 는 것 을 알 지만 그들의 의 도 는 다르다.그들의 주요 차이 점 을 다시 한 번 살 펴 보 자.
프로젝트 인 스 턴 스
내 원본 주소 로 건 너 뛰 기
simple 1 가방 에 서 는 주로 선풍기 의 스위치 상 태 를 전환 합 니 다. 사실 우 리 는 상 태 를 상태 류 에 두 고 고정된 논리 에 따라 전환 합 니 다. 그러나 이런 모델 은 개폐 원칙 에 부합 되 지 않 습 니 다. 왜 냐 면 우리 가 새로 추가, 수정 또는 삭제 상태 가 발생 하면 상태 류 의 상태 전환 을 수정 해 야 하기 때 문 입 니 다.
public class Application {
public static void main(String[] args) {
Context context = new Context(new CloseLevelState());
context.right();
context.right();
context.right();
context.left();
context.right();
context.right();
}
}
추상 상태
public interface LevelState {
/**
*
*
* @param context
*/
void left(Context context);
/**
*
*
* @param context
*/
void right(Context context);
/**
*
* @return
*/
String info();
}
구체 적 인 위치 상 태 는 나 는 단지 두 개 만 열 거 했 을 뿐, 다른 것 은 유사 하 다.
@Slf4j
public class OneLevelState implements LevelState {
@Override
public void left(Context context) {
LevelState levelState = new CloseLevelState();
context.setLevelState(levelState);
log.info(" {}", levelState.info());
}
@Override
public void right(Context context) {
LevelState levelState = new TwoLevelState();
context.setLevelState(levelState);
log.info(" {}", levelState.info());
}
@Override
public String info() {
return "1 ";
}
}
@Slf4j
public class CloseLevelState implements LevelState {
@Override
public void left(Context context) {
LevelState levelState = new ForeLevelState();
context.setLevelState(levelState);
log.info(" {}", levelState.info());
}
@Override
public void right(Context context) {
LevelState levelState = new OneLevelState();
context.setLevelState(levelState);
log.info(" {}", levelState.info());
}
@Override
public String info() {
return "0 ";
}
}
진정한 스위치 는 문맥 이다.
@Data
@AllArgsConstructor
public class Context {
private LevelState levelState;
public void left() {
levelState.left(this);
}
public void right() {
levelState.right(this);
}
public String info() {
return levelState.info();
}
}
레 퍼 런 스
자바 에서 상태 모드 와 전략 모드 의 차이
상태 모드 | 초보 튜 토리 얼
주목 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.