국가 디자인 패턴의 사용을 설명하기 위해, 우리가 요리로봇을 구축하고자하는 회사를 도와 보자. 이 회사는 단순히 걷고 요리 할 수있는 간단한 로봇을 원한다. 사용자는 리모컨을 통해 일련의 명령을 사용하여 로봇을 조작할 수 있습니다. 현재 로봇은 세 가지 작업을 수행할 수 있으며, 걷거나 요리하거나 끌 수 있습니다. 상태 패턴은 내부 상태가 변경될 때 개체의 동작을 변경해야 하는 문제를 해결합니다. 또한 새 상태를 추가하면 기존 상태의 동작에 영향을 주지 않습니다. 두 디자인 패턴은 매우 유사하지만 UML 다이어그램은 동일하며 그 뒤에 있는 아이디어는 약간 다릅니다. 컨텍스트에는 여러 개의 내부 상태가 있을 수 있으며, 컨텍스트에서 request() 메서드가 호출될 때마다 메시지를 처리할 상태로 위임됩니다. 상태 인터페이스는 특정 상태와 관련된 모든 동작을 캡슐화하는 모든 콘크리트 상태에 대한 공통 인터페이스를 정의합니다. ConcreteState는 요청에 대한 자체 구현을 구현합니다. 컨텍스트가 상태를 변경하면 실제로 발생하는 것은 다른 ConcreteState가 연결되어 있다는 것입니다. Context는 또한 상태를 구현하고 현재 상태에 대한 참조를 유지하고 요청을 상태 구현으로 전달합니다. mp3 플레이어의 상태를 사용하여 동작 상태 패턴의 예를 제공합니다.

먼저 우리는 우리의 mp3 플레이에 대한 컨텍스트를 설정합니다. 패턴이 올바르게 구현되지 않았다는 점에서 정확합니다. 컨텍스트 클래스는 저장된 상태 개체를 사용하여 doWhatever() 메서드를 호출하고 중첩된 일련의 ifs로 이동하여 수행할 작업을 파악하지 않아야 합니다. 내 의견으로는, 두 대신 세 가지 상태로이 예제를 표시하는 것이 좋습니다. 두 상태 간에 전환하는 것은 너무 단순합니다. 따라서 컨텍스트 클래스는 저장된 (현재) 상태를 사용하여 수행할 작업을 결정해야합니다: public 클래스 Context { 개인 상태 현재; 상태 패턴은 동작 디자인 패턴 중 하나입니다. 상태 디자인 패턴은 개체가 내부 상태에 따라 동작을 변경할 때 사용됩니다. 공개 보이드 집합Current(상태 상태) { 현재 = 상태; } 이제 하나의 패턴이 남았습니다 – 빌더 패턴.

우리는 앞으로 며칠 안에 그것을 다룰 것입니다. 따라서 상태 패턴이 간단한 수준에서 작동하는 방식을 보여 주어 도있습니다. 물론 pressPlay 메서드는 단순히 컨텍스트의 상태를 설정하는 것 이상을 수행할 것입니다. 상태 패턴은 클래스에 대한 효율적인 구조를 디자인하는 데 유용하며, 일반적인 인스턴스는 다양한 상태에 존재할 수 있으며 현재 상태에 따라 다른 동작을 나타낼 수 있습니다.