실전 - 상태 모드 (State Pattern)

2537 단어 Pattern
실전 - 상태 모드 (State 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");
	}

}


개인 적 으로 디자인 모델 을 배우 기 위해 디자인 모델 을 배우 지 마 세 요!실제 문 제 를 해결 하 는 데 진정 으로 써 야만 그 가 가 져 온 좋 은 점 을 깨 달 을 수 있다!여러분 의 실험 검증 에 편리 하도록 첨부 파일 은 본 고의 프로그램 소스 코드 를 제공 하 였 습 니 다.

좋은 웹페이지 즐겨찾기