state 패턴 예제

공개 보이드 집합Current(상태 상태) { 현재 = 상태; } 상태는 전략의 확장으로 간주될 수 있습니다. 두 패턴 모두 컴포지션을 기반으로 합니다. 전략은 이러한 개체를 완전히 독립적이며 서로를 인식하지 못하게 합니다. 그러나 State는 구체적인 상태 간의 종속성을 제한하지 않으므로 컨텍스트의 상태를 의지에 따라 변경할 수 있습니다. 컨텍스트를 사용하는 클라이언트 응용 프로그램은 컨텍스트에 대한 현재 State 개체를 지정할 책임이 없지만 대신 특정 상태를 나타내는 각 상태 클래스는 컨텍스트를 전환하는 데 필요한 구현을 제공해야 합니다. 다른 주로. 응용 프로그램 개체가 Context 메서드(동작)를 호출하면 메서드 호출을 현재 State 개체로 전달합니다. 로봇 클래스는 RoboticState 인터페이스를 구현하는 구체적인 클래스입니다. 클래스에는 로봇이 있을 수 있는 모든 가능한 상태 집합이 포함되어 있습니다. 상태 컴퓨터는 일반적으로 개체의 현재 상태에 따라 적절한 동작을 선택하는 많은 조건부 연산자(if 또는 switch)로 구현됩니다.

일반적으로 이 “상태”는 개체 필드의 값 집합일 뿐입니다. 유한 상태 시스템에 대해 들어 본 적이 없더라도 적어도 한 번은 상태를 구현했을 것입니다. 다음 코드 구조가 벨을 울리나요? 컨텍스트 클래스는 저장된 (현재) 상태를 사용하여 수행할 작업을 결정해야합니다: public 클래스 Context { 개인 상태 현재; 내 게, 이것은 안티 패턴. 이것은 이 부울에 따라 부울 매개 변수와 2 개의 작업을 소용돌이치는 메서드를 갖는 것과 같습니다. 그것은 우려의 분리와 단일 책임 원칙을 존중하지 않습니다 : 1 행동에 대한 1 방법. 경우에 1을 수행해야하고 다른 경우에는 액션 2를 수행해야하는 경우 액션 1및 action2 méthods를 만듭니다. 같은 예 : 방법 1 : 공공 부울은TheTvOn (); 방법 2 : 공공 무효 턴OnTheTv (); 방법 3 : 공공 무효 턴오프TheTv (); 서비스 계층에서 수행할 작업을 결정하고 이 자습서에서는 동작 GoF 디자인 패턴 중 하나인 상태 패턴을 소개합니다. 상태 패턴은 클래스에 대한 효율적인 구조를 디자인하는 데 유용하며, 일반적인 인스턴스는 다양한 상태에 존재할 수 있으며 현재 상태에 따라 다른 동작을 나타낼 수 있습니다.

즉, 이러한 클래스의 개체의 경우 동작의 일부 또는 전부가 현재 상태에 완전히 영향을 받습니다.