1) 개요
상태 디자인 패턴은 객체 내부의 상태에 따라 동작을 변경해야할 때 사용하는 디자인 패턴입니다.
- 장점
1. 하나의 객체에 대한 여러 동작을 구현해야할 때 상태 객체만 수정하므로 동작의 추가, 삭제 및 수정이 간단해집니다.
2. State 패턴을 사용하면 객체의 상태에 따른 조건문(if/else, switch)이 줄어들어 코드가 간결해지고 가독성이 올라갑니다.
- 단점
1. 상태에 따른 조건문을 대신한 상태 객체가 증가하여 관리해야할 클래스의 수가 증가합니다.
2) UML
- Context : 객체의 상태를 정의하는 데 사용되는 메소드를 정의하는 인터페이스입니다.
- State : 상태에 따른 동작을 정의하는 인터페이스입니다.
- ConcreteState : State에서 정의된 메소드를 구현하는 클래스입니다.
3) 예제
1 2 3 4 | public interface MobileAlertState { public void alert(AlertStateContext ctx); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class AlertStateContext { private MobileAlertState currentState; public AlertStateContext() { currentState = new Vibration(); } public void setState(MobileAlertState state) { currentState = state; } public void alert() { currentState.alert(this); } } | cs |
1 2 3 4 5 6 7 8 9 | public class Vibration implements MobileAlertState{ @Override public void alert(AlertStateContext ctx) { System.out.println("Vibration"); } } | cs |
1 2 3 4 5 6 7 8 9 | public class Slient implements MobileAlertState{ @Override public void alert(AlertStateContext ctx) { System.out.println("Silent"); } } | cs |
1 2 3 4 5 6 7 8 9 | public class Main { public static void main(String[] args) { AlertStateContext stateContext = new AlertStateContext(); stateContext.alert(); stateContext.setState(new Slient()); stateContext.alert(); } } | cs |
- Reference :
'IT > 디자인 패턴(Design Pattern)' 카테고리의 다른 글
[디자인 패턴] 인터프리터 패턴(Interpreter Pattern) (0) | 2019.02.15 |
---|---|
[디자인 패턴] 전략 패턴(Strategy Pattern) (0) | 2019.02.15 |
[디자인 패턴] 템플릿메소드 패턴(TemplateMethod Pattern) (0) | 2019.02.14 |
[디자인 패턴] 방문자 패턴(Visitor Pattern) (2) | 2019.02.14 |
[디자인 패턴] 메멘토 패턴(Memento Pattern) (0) | 2019.02.13 |