이 단락은 기본적으로 상태를 개별 클래스로 인코딩한다고 말합니다. 인스턴스 유형은 "상태"이고 클래스는 필요한 모든 정보를 인코딩하기 때문에 인스턴스 변수가 필요하지 않습니다.
예 : '열림', '활성'및 '닫힘'상태를 원합니다. -
또 다른 옵션 -이이 상태 클래스를 생성하는 것 GOF 텍스트에서 암시되고 플라이급과 조합 의심 것 무리
abstract class State {};
class Open extends State {
public Open() {}
}
class Active extends State {
public Active() {}
}
class Closed extends State {
public Closed() {}
}
: 나는 다음과 같은 클래스를 정의 할 수 있습니다 다음 공유 할 수의 정적 멤버 (각 상태에 대해 하나) -
public class State {
private string name;
private State(String name) {
this.name = name;
}
public final static State OPEN = new State("Open");
public final static State ACTIVE = new State("Active");
public final static State CLOSED = new State("Closed");
}
나는이 모든 것들을 자세히 어떻게 작동하는지의 자신을 생각 나게 파고 가야했다. Kerievsky는 이것에 대해 잘 설명하고있다. (나는 위 예제 중 하나에서 많이 빌려왔다!) 그리고 각 전환을 관리하는 클래스를 생성하기 위해 상태 클래스를 하위 클래스로 처리하는 방법을 설명한다. "패턴에 리팩토링"(ISBN : 0321213351)를 참조하십시오
EDIT (2) : 그의 웹 사이트는 자신의 예를 들어, 클래스 다이어그램이 - 상태 패턴에서 http://www.industriallogic.com/xp/refactoring/alteringConditionalsWithState.html
두 번째 질문에 대해 설명해 주시겠습니까? 일반적으로 주정부 시스템은 주 시스템으로 바뀌기 위해 어떤 상태로 변경해야하는지에 대한 결정을 내리지 않습니다. 그것은 상태와 그 사이의 전환을 정의하는 것뿐입니다. –
BTW, 이것은 C++과는별로 관련이 없습니다. –
아시다시피, 상태 패턴은 상태 전이 메소드를 정의하지 않습니다. 따라서 상태 패턴을 사용하여 상태 전이를 코딩하는 방법은 무엇입니까? 도와주세요. 감사합니다. – peterwkc