반응형
1. 정의. 
의도
 - 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴으로, 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보입니다.
위키피디아
The state pattern, which closely resembles Strategy Pattern, is a behavioral software design pattern, also known as the objects for states pattern. This pattern is used in computer programming to encapsulate varying behavior for the same object based on its internal state. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements[1]:395 and thus improve maintainability.[2] 
해드퍼스트
 - 스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다.

2. 동기.
- 한 시스템(책에서는 TCPConnection)의 모든 상태를 표현하는 추상클래스를 통해 각 상태별로 어떻게 동작하는지 관리할 수 있다.
- 상태 조건들이 복잡한 분기문에 숨어 있는 경우 유지보수와 확장에 어려움이 있다.

3. 활용성.
 - 객체의 행동이 상태에 따라 달라지며, 런타임 시에 행동이 바뀌어야 할 때와 다중 분기 조건 처리가 너무 많을 때.

4. 참여자.
 - Context, State, ContcreteState

5. 협력방법.
-  Context 에 있는 State 의 기본 인터페이스를 통해서 Context 클래스에서 현재 상태를 정의하고, 상태에 따라 다른 요청을 받으면 ConcreteState 객체로 전달합니다. 이러한 Context 를 통해 사용자는 State 객체를 직접 다루지 않고 요청을 보내기만 하면 됩니다.

6.결과.
 - 상태에 따른 행동을 국소화하며, 서로 다른 상태에 대한 행동을 별도의 객체로 관리합니다.
 - 상태 전이를 명확하게 만듭니다.
 - 상태 객체는 공유 될 수 있습니다.
 - 동적 상속을 이용하는 방법.

7. 구현(고려해야 될 부분)
 - 누가 상태 전이를 정할 것인가? (Context? State?)
 - 테이블 기반의 대안(다음 상태에 대한 전이 저장) -> Table Driven State  Pattern
 - 상태 객체의 생성과 소멸.

8. Diagram.







반응형

+ Recent posts