Page semi-protected

상태 패턴

State pattern

상태 패턴은 물체가 내부 상태가 변할 때 그 행동을 바꿀 수 있도록 하는 행동 소프트웨어 설계 패턴이다.이 패턴은 유한 상태 기계의 개념에 가깝다.상태 패턴은 패턴의 인터페이스에 정의된 방법의 호출로 전략을 전환할 수 있는 전략 패턴으로 해석할 수 있다.

상태 패턴은 컴퓨터 프로그래밍에서 내부 상태에 기초하여 동일한 개체에 대한 다양한 동작을 캡슐화하는 데 사용된다.이것은 물체가 조건문에 의존하지 않고 런타임에 그것의 행동을 변화시키고 따라서 유지보수를 향상시키는 더 깨끗한 방법이 될 수 있다.[1]: 395

개요

상태 설계 패턴에 대한 샘플 UML 클래스 및 시퀀스 다이어그램.[2]

국가 디자인 패턴은 4대강이 문서화한 23개의 디자인 패턴 중 하나로 반복적인 디자인 문제를 해결하는 방법을 기술하고 있다.이러한 문제들은 구현, 변경, 테스트, 재사용하기 쉬운 객체 등 유연하고 재사용 가능한 객체 지향적인 소프트웨어의 설계를 다룬다.[3]

국가 패턴은 다음과 같은 두 가지 주요 문제를 해결하도록 설정된다.[4]

  • 개체는 내부 상태가 변할 때 그 행동을 변화시켜야 한다.
  • 주별 행동은 독립적으로 정의해야 한다.즉, 새로운 상태를 추가하는 것이 기존 국가의 행동에 영향을 주어서는 안 된다.

계급 내에서 직접적으로 국가별 특정한 행동을 구현하는 것은 계급이 특정한 행동에 맡기고, 계급의 변경 없이 나중에 계급과 독립적으로 새로운 상태를 추가하거나 기존 상태의 행동을 변경할 수 없게 하기 때문에 융통성이 없다.여기서 패턴은 두 가지 해결책을 설명한다.

  • 각 상태에 대해 상태별 동작을 캡슐화하는 개별(상태) 개체를 정의하십시오.즉, 상태별 동작을 수행하기 위한 인터페이스(상태)를 정의하고, 각 상태에 대해 인터페이스를 구현하는 클래스를 정의한다.
  • 클래스는 주별 동작을 직접 구현하는 대신 주별 동작을 현재 상태 개체로 위임한다.

이것은 클래스를 국가별 특정한 행동이 구현되는 방식과 독립적으로 만든다.새로운 상태 클래스를 정의하면 새로운 상태를 추가할 수 있다.클래스는 현재 상태 개체를 변경하여 런타임에 동작을 변경할 수 있다.


구조

UML의[1] 상태

함께 제공되는 UML(Unified Modeling Language) 클래스 다이어그램에서Context클래스는 주별 특정한 행동을 직접적으로 구현하지 않는다.대신,Context에 언급하다State상태별 동작을 수행하기 위한 인터페이스(state.handle())이 만드는 것Context주별 행동의 이행 방식과는 무관하게.ConcreteStateA그리고ConcreteStateB계급이 실행하다.State인터페이스, 즉 각 주에 대한 주별 동작을 구현(완전하게)한다.UML 시퀀스 다이어그램은 런타임 교호작용을 보여준다.

Context주별 행동을 서로 다른 방식으로 위임State물건들일단.Context전화를 하다handle(this)현재(일반) 상태 객체에서 (ConcreteStateA)) 연산과 호출을 수행한다.setState(ConcreteStateB)에 관하여Context컨텍스트의 현재 상태를 다음으로 변경하다ConcreteStateB. 다음번에는Context다시 전화하다.handle(this)현재 상태 객체(ConcreteStateB() 작업을 수행하고 컨텍스트의 현재 상태를 다음으로 변경ConcreteStateA.

참조

  1. ^ a b Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2.{{cite book}}: CS1 maint: 작성자 매개변수 사용(링크)
  2. ^ "The State design pattern – Structure and Collaboration". w3sDesign.com. Retrieved 2017-08-12.
  3. ^ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 305ff. ISBN 0-201-63361-2.{{cite book}}: CS1 maint : 복수이름 : 작성자 목록(링크)
  4. ^ "The State design pattern - Problem, Solution, and Applicability". w3sDesign.com. Retrieved 2017-08-12.