실전 - 상태 모드 (State Pattern)
2537 단어 Pattern
상태 모델 은 비교적 간단 한 디자인 모델 중 하나 로 좋 은 재 활용 코드 방식 (코드 재 활용 방식: 계승 과 조합, 계승 관계 가 확 정 된 상황 에서 대상 의 상 태 를 동태 적 으로 바 꾸 려 면 조합 만 사용 할 수 있다) 이다.상태 모드 는 조합 을 통 해 대상 상 태 를 동적 으로 변경 하 는 목적 을 달성 하 는 것 이다.직접 코드 를 올 리 고 다음은 person 과 person state 두 개의 인터페이스 와 대응 하 는 실현 입 니 다.
package com.yan.mode;
public interface Person {
void changeState();
void run();
}
package com.yan.mode;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class PersonImpl implements Person {
private PersonState state = new Sleep();
private Random random = new Random(100);
private List<PersonState> stateList;
PersonImpl(){
if (null == stateList)
stateList = new ArrayList<PersonState>();
stateList.add(new Sleep());
stateList.add(new Study());
stateList.add(new Work());
}
@Override
public void changeState() {
PersonState old = state;
while(old == state)
state = stateList.get(random.nextInt(stateList.size()));
System.out.println("===state has been changed====");
}
@Override
public void run() {
state.run();
}
public static void main(String[] args) {
Person person = new PersonImpl();
person.run();
for (int i = 0; i < 10; i++) {
person.changeState();
person.run();
}
}
}
package com.yan.mode;
public interface PersonState {
void run();// public static
}
package com.yan.mode;
public class Sleep implements PersonState {
@Override
public void run() {
System.out.println("I am sleeping");
}
}
package com.yan.mode;
public class Study implements PersonState{
@Override
public void run() {
System.out.println("I am studying");
}
}
package com.yan.mode;
public class Work implements PersonState {
@Override
public void run() {
System.out.println("I am working");
}
}
개인 적 으로 디자인 모델 을 배우 기 위해 디자인 모델 을 배우 지 마 세 요!실제 문 제 를 해결 하 는 데 진정 으로 써 야만 그 가 가 져 온 좋 은 점 을 깨 달 을 수 있다!여러분 의 실험 검증 에 편리 하도록 첨부 파일 은 본 고의 프로그램 소스 코드 를 제공 하 였 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
문자열을 날짜 대상으로 변환하기 (각도를 바꾸어 코드를 쓰기)/** * 日期模式定义. */ var GlobalDatePattern = [ { pattern: "yyyy-MM-dd HH:mm:ss", fix: { year: 0, month: 1, day: 2, hour: 3, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.