INNENTÜREN, TUNING DESIGN TÜREN aus Slowenien.


  • Ljubljana


    0038651 - 660 - 406

  • Ptuj


    0038651 - 316 - 130
    0038631 - 688 - 777

state 패턴 예제

state 패턴 예제

상태 패턴의 주요 개념은 개체가 클래스를 변경하지 않고 동작을 변경할 수 있도록 하는 것입니다. 또한 이를 구현하면 많은 if/else 문 없이 코드가 더 깔끔해져야 합니다. 다음은 로봇의 동작을 포함하는 RoboticState 인터페이스입니다. 위의 UML(통합 모델링 언어) 클래스 다이어그램에서 Context 클래스는 상태별 동작을 직접 구현하지 않습니다. 대신 Context는 상태별 동작(state.operation()을 수행하기 위한 상태 인터페이스를 참조하여 상태별 동작이 구현되는 방식과 관계없이 컨텍스트를 만듭니다. State1 및 State2 클래스는 상태 인터페이스, 즉 각 상태에 대한 상태별 동작을 구현(캡슐화)합니다. UML 시퀀스 다이어그램은 런타임 상호 작용을 보여 주며, 상태 디자인 패턴의 예 아래 예제에서는 모바일 상태 시나리오를 구현했습니다. 경고와 관련하여 모바일은 다른 상태에 있을 수 있습니다. 예를 들어, 진동과 무음. 이 경고 상태에 따라 경고를 수행할 때 모바일 동작이 변경됩니다. 개체의 동작이 개체의 상태에 의해 영향을 받아야 하고 복잡한 조건이 개체 동작을 상태에 연결하는 경우 상태 패턴을 사용해야 합니다. 개체의 상태에 따라 개체의 동작을 변경해야 하는 경우 Object에 상태 변수를 사용하고 if-else 조건 블록을 사용하여 상태에 따라 다른 작업을 수행할 수 있습니다.

상태 패턴은 컨텍스트 및 상태 구현을 통해 이를 달성하기 위한 체계적이고 손실결합된 방법을 제공하는 데 사용됩니다. 상태별 동작을 별도의 클래스로 캡슐화하면 if-else 또는 switch-case 구문과 같은 조건부 문이 너무 많지 않으면 컨텍스트 구현을 읽기가 더 쉬워집니다. Context 개체를 처음 만들 때 초기 상태 개체를 통해 자체를 초기화합니다. 이 상태 개체는 컨텍스트에 대 한 현재 상태 개체가 됩니다. 현재 State 개체를 새 State 개체로 대체하면 컨텍스트가 새 상태로 전환됩니다. 상태 패턴은 동작을 상태에 종속상태로 만드는 방법의 문제에 대한 해결책입니다. 이 예제에서는 TV를 켜고 다른 하나는 끄는 두 가지 상태를 가질 수 있습니다. 따라서 이러한 동작에 대한 두 가지 구체적인 상태 구현을 만듭니다.

위의 예에서는 개체의 상태를 다른 클래스로 캡슐화하여 코드를 관리하고 유연하게 만드는 것을 보았습니다. 상태 패턴은 동작 디자인 패턴 중 하나입니다. 상태 디자인 패턴은 개체가 내부 상태에 따라 동작을 변경할 때 사용됩니다. if-else 문을 사용하는 문제없이 이를 구현할 수 있다고 생각할 수 있지만 변경이 발생하면 코드가 더 복잡해질 수 있습니다. 요구 사항은 개체의 동작이 해당 개체의 상태를 기반으로 한다는 것을 명확하게 보여 줍니다. 개체의 상태를 다른 개별 클래스로 캡슐화하고 상태 변경과 독립적으로 컨텍스트 클래스를 유지하는 상태 디자인 패턴을 사용할 수 있습니다. 처음에는 그 목적에 대한 개요를 제공하고 해결하려는 문제를 설명합니다. 그런 다음 주 UML 다이어그램과 실제 예제 구현을 살펴보겠습니다. 구체적인 상태는 상태별 메서드에 대한 자체 구현을 제공합니다. 여러 주에서 유사한 코드가 중복되지 않도록 하려면 몇 가지 일반적인 동작을 캡슐화하는 중간 추상 클래스를 제공할 수 있습니다. 수정 : 패키지 클래스에는 setState() 메서드가 없습니다. 그것은 콘크리트 클래스에서 호출 받고 (OrderedState,DeliveredState,…).

우선 다른 콘크리트 상태 및 컨텍스트 클래스에 의해 구현 되어야 하는 메서드를 정의 하는 상태 인터페이스를 만듭니다.