하루 하나의 디자인 모델 - 상태 모드
7897 단어 디자인 모드자바 성능 개선하루 하나의 디자인 패턴
역할: 상태 모델 의 의 도 는 상태 에 따라 행 위 를 분리 하고 선택 하여 한 대상 이 내부 상태 가 바 뀔 때 그 행위 도 이에 따라 달라 지 는 것 이다.
장면: 일부 생존 게임, 예 를 들 어 는 장면 에서 비 일회 성 상호작용 물품 이 많다. 예 를 들 어 나무, 풀 등 은 정기 적 으로 시들 고 자란 다.나 무 는 성장 - 결과 - 멸망 으로 나 눌 수 있다.
역할 및 역할
한 업무 에서 우 리 는 if - else 등 이 많 을 것 이다.원래 의 논리 가 옳 을 수도 있 지만 우리 가 그 안에 기능 을 추가 하고 논 리 를 수정 하면 매우 번 거 로 울 것 이다.이 럴 때 상태 모드 를 사용 할 수 있 습 니 다.
역할.
역할.
환경 (Context)
상하 문 이 라 고도 하 는데 상태 가 그 현황 을 결정 한다
추상 상태 (상태)
환경 (Context) 대상 의 특정한 상태 에 대응 하 는 인 터 페 이 스 를 정의 합 니 다.
구체 적 인 상태 (ConcreteState)
모든 구체 적 인 상태 류 는 환경 (Context) 의 한 상태 에 대응 하 는 행 위 를 실현 했다.
2. 나무의 일생 을 모방 합 니 다.
환경 역할
(나무) 평생 겪 을 수 있 는 모든 상 태 를 보존 하고 유전 자 는 나무의 생장 과 결과 의 최대 나 이 를 결정 한다.
public class Tree {
// State
private TreeState state;
//
public Map states = new HashMap();
public int growSize; //
public int fruitSize; //
public int now = 1; //
public Tree() {
states.put("grow", new GrowState(this));
states.put("fruit", new FruitState(this));
states.put("death", new DeathState(this));
this.state = states.get("grow");
// , , 5 , 2
Random random =new Random();
growSize =random.nextInt(5);
fruitSize = random.nextInt(2);
}
public void setState(TreeState state) {
this.state = state;
}
public void handle() {
state.handle();
}
}
상태.
public interface TreeState {
public void handle();
}
성장 상태
나무 가 일정 연령 까지 자라 면 결과 상태 로 들어간다.
public class GrowState implements TreeState {
private Tree tree;
public GrowState(Tree tree) {
this.tree = tree;
}
@Override
public void handle() {
if (tree.now < tree.growSize) {
System.out.println(" ");
tree.now++;
} else {
tree.setState(tree.states.get("fruit"));
}
}
}
결과 상태
결과 나 이 를 넘 으 면, 나 무 는 사망 상태 로 들어간다.
public class FruitState implements TreeState {
private Tree tree;
public FruitState(Tree tree) {
this.tree = tree;
}
@Override
public void handle() {
if (tree.now < (tree.growSize + tree.fruitSize)) {
System.out.println(" ");
tree.now++;
} else {
tree.setState(tree.states.get("death"));
}
}
}
사망 상태
public class DeathState implements TreeState {
private Tree tree;
public DeathState(Tree tree) {
this.tree = tree;
}
@Override
public void handle() {
System.out.println(" ");
tree.setState(tree.states.get("death"));
}
}
아 날로 그 성장
어떤 나무의 일생
Tree tree = new Tree();
while (true) {
tree.handle();
}
프로 세 스
단점 - 클래스 와 대상 의 개 수 를 늘 리 고 잘못 사용 하면 논리 적 혼란 을 초래 할 수 있다.상태 모드 는 '개폐 원칙' 에 대한 지원 이 좋 지 않 습 니 다. 새로운 상태 클래스 를 추가 하려 면 상태 전환 을 담당 하 는 소스 코드 를 수정 해 야 합 니 다.
3. 상태 모델 과 전략 모델 의 비교
인터넷 에서 다른 대신 블 로 그 를 공부 할 때 많은 평론 을 보 았 다. 이것 은 상태 모델 이 아니 라 전략 모델 이거 나 전략 모델 이 아니 라 상태 모델 이 므 로 남 의 자 제 를 망치 지 마라.그러나 블 로 거들 은 옳 았 고 거 친 말 을 하 는 사람들 은 오히려 자신 이 무지 했다.상태 모드 는 항상 전략 모드 와 혼동 된다.간단 한 방법 은 환경 캐릭터 가 뚜렷 한 상태 와 상태의 과도 가 있 는 지 를 고찰 하 는 것 이다.
상태 모드:
상태 모델 처리 의 핵심 문 제 는 상태의 이동 이다. 대상 이 많은 상태 가 존재 하 는 상황 에서 각 상태 간 의 이동 과 이동 과정 은 모두 복잡 하기 때문이다.상태 모델 에서 상태 변 화 는 대상 의 내부 조건 에 의 해 결정 되 고 외부 에 서 는 그 인터페이스 에 만 관심 을 가 져 야 하 며 그 상태 대상 의 생 성과 전환 에 관심 을 가 질 필요 가 없다.
정책 모드:
전략 모델 의 장점 은 대상 의 전략 행 위 를 동적 으로 바 꿀 수 있다 는 데 있다.전략 모델 에서 어떤 전략 을 취 할 지 는 외부 조건 에 의 해 결정 된다. 즉, 어떤 전략 을 사용 할 지 는 우리 가 제공 하고 전략의 구체 적 인 실현 유형 은 대응 알고리즘 을 실현 하 는 것 이다.예 를 들 어 하나의 상품 을 우 리 는 가격 인하 와 가격 인상 전략 을 많이 가 질 수 있다. 우 리 는 각종 전략의 규칙 을 정 한 다음 에 상품 을 집행 하 게 하면 된다.
더 많은 모델: 하루 하나의 디자인 모델 - 분류 와 6 대 원칙
더 많은 원본 코드:https://github.com/oDevilo/Java-Base
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.