[스테이트 패턴의 목적]
: 객체가 내부 상태 바뀔때 객체의 동작을 변경할 수 있도록 한다.
[스테이트 패턴 구현 기초]
1. 우선 상태들을 모아본다.
동전 있음 / 동전 없음 / 상품 매진 / 상품 판매 |
2. 각 상태를 저장하기 위한 인스턴스 변수를 만들고 각 값을 정의
final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; int state = SOLD_OUT; // 초기 상태 |
3. 이 시스템에서 있을수 있는 모든 행동을 모은다.
동전 투입 / 동전 반환 / 손잡이 돌림 / 알맹이 내보냄 |
4. 이제 이 행동들을 구현해, 행동을 구현할때 state가 변하는 것을 구현해준다.
// 동전 투입 구현 public void insertQuarter() { if (state == HAS_QUARTER) { System.out.println(" 동전은 한개만 넣어주세요"); } else if (state == SOLD_OUT) { System.out.println(" 매진되었습니다. 다음 기회에 이용해주세요"); } else if (state == SOLD) { System.out.println("기대려주세요. 상품이 나오고 있습니다"); } else if (state == NO_QUARTER) { state = HAS_QUARTER; // 상태 변경 System.out.println("동전이 투입되었습니다"); } } |
5. 위와 같이 상태들을 구현 했지만 복잡하다.. 왜?
: insertQuarter했을때, 동전 상태와 상품 상태 일일히 확인해줘야하고.. 수정시 코드 복잡해지고...
: 그래서 각 상태에 따라 메소드 수행할 수있게끔 해준다. => state 패턴
[스테이트 패턴 예시]
1. 뽑기 기계
: 위의 예시// 코드 존재
'기타 > [고급객체지향 프로그래밍]' 카테고리의 다른 글
디자인 패턴 9강. 다오 패턴(Dao Pattern) (0) | 2019.12.14 |
---|---|
디자인 패턴 7강. 어댑터 패턴과 퍼사드 패턴(Adapter, Facade Pattern) (0) | 2019.12.12 |
디자인 패턴 6강. 커맨드 패턴(Command Pattern) (0) | 2019.12.10 |
디자인 패턴 5강. 싱글턴 패턴(Singleton Pattern) (0) | 2019.12.06 |
디자인 패턴 4강. 팩토리 패턴(Factory pattern) (0) | 2019.12.02 |