상태를 클래스로 만들어 관리하는 패턴
1. 코드
MaterialState : 상태 클래스들의 인터페이스
public interface MaterialState {
void speakState();
void speakFeature();
}
MaterialState1 : 상태 클래스1
public class MaterialState1 implements MaterialState {
private static MaterialState1 instance = new MaterialState1();
private MaterialState1() {
}
public static MaterialState1 getInstance() {
return instance;
}
@Override
public void speakState() {
System.out.println("상태1 입니다.");
}
@Override
public void speakFeature() {
System.out.println("특징1 입니다.");
}
}
MaterialState2 : 상태 클래스2
public class MaterialState2 implements MaterialState {
private static MaterialState2 instance = new MaterialState2();
private MaterialState2() {
}
public static MaterialState2 getInstance() {
return instance;
}
@Override
public void speakState() {
System.out.println("상태2 입니다.");
}
@Override
public void speakFeature() {
System.out.println("특징2 입니다.");
}
}
Material : 상태 클래스를 사용하기 위한 클래스
public class Material {
private MaterialState state;
public void setState(int num) {
if (num % 2 == 0) {
state = MaterialState1.getInstance();
} else {
state = MaterialState2.getInstance();
}
}
public void speakState() {
state.speakState();
}
public void speakFeture() {
state.speakFeature();
}
}
Main: 테스트 클래스
public class Main {
public static void main(String[] args) {
Material material = new Material();
Random random = new Random();
for (int i = 0; i < 10; i++) {
material.setState(random.nextInt());
material.speakState();
material.speakFeture();
}
}
}
2. 특징
- 언제 어떤 상태가 되어야 하는지 관리가 쉽다.
- 새로운 상태를 생기면 상태 클래스를 추가하기만 하면 된다.
- 또한 상태에 따른 행동이 인터페이스에 기재되어 있으므로 누락되는 오류를 막을 수 있다.
- 상태들이 서로 독립적이다.
- Material클래스만 잘 관리하면 두 상태가 공존하는 오류를 막기 쉽다.
3. 해당 패턴을 고려해볼만한 상황
- 상태에 따른 로직 관리가 필요할 때
'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글
Memento 패턴 (0) | 2021.03.08 |
---|---|
Observer 패턴 (0) | 2021.02.21 |
Mediator 패턴 (0) | 2021.02.14 |
Facade 패턴 (0) | 2021.02.12 |
Chain Of Responsibility 패턴 (0) | 2021.02.11 |