2013-02-17 1 views
2

상태 패턴을 사용하려고하는데 질문이 있습니다.상태 패턴의 최대 상태 수

가 TCPState : 1- 2 TCPLisenting이 3가 등

을 TCPClosed 아니면이 수백 경우에 사용할 수 있습니다 TCPEstablished에만이 같은 국가의 제한된 수 situtations을 위해 설계 상태의 패턴은 예를 들어 근로자가 출석 시스템에서 근무하는 직원은 직원이 자신의 잔고에 포함 된 연간 휴가 수, 이번 달에 보상해야 할 시간 수, 시간당 급여를 나타내는 국가와 같은 여러 구성 요소의 복합 상태를 갖습니다. 이번 달의 작업량에 따라 각 직원은 결국 상태 w로 간주되는 여러 속성의 조합을 가질 수 있습니다 어떤 행동.

이 경우에는 상태 객체가 hundrerds가 될 것입니다. 올바른 일이 무엇입니까? 어떻게 상태 객체 이름을 관리하겠습니까? 예를 들어 주 중 3 분의 1이 특정 방법에 대해 특정 행동을 공유하고 다른 4 분의 1에 특정 방법 등에 대해 다른 행동을 공유하는 경우 어떻게 할 것인가? 즉 모든 주마다 모든 방식에서 고유 한 행동을 취할 필요는 없습니다. 나는이 일반적인 메소드에 대해 동일한 동작을하는 모든 주에 구현을 복사하고 붙여 넣는 것이 현명 할 것이라고 생각하지 않는다.

대단히 감사합니다.

+1

일반적으로 언급 한 변수를 사용하여 제한된 수의 상태를 정의 할 수 있다면 State 패턴을 사용할 수 있다고 생각합니다. '급여 1/2/3', '보완하는 데 8 시간 이내'등이 있습니다.하지만 어떤 소프트웨어를 구축하고 싶은지, 그리고 왜 주 패턴을 사용해야하는지에 대해 설명하는 것이 좋습니다. 처음에는 –

+0

이 시스템은 사용자에게 특정 위치에 액세스 할 수있는 액세스 카드를 부여하는 허가 관리 시스템입니다. 허가증에는 여러 가지 특성이있어 함께 결합되면 특정 행동을 강요하게되는 상태가 형성되어 그 때문에 내가 주립 패턴을 선택하게됩니다. 허가증에는 State atrribute (6 변형으로 구성) 및 StoppedState 특성 (3 변형으로 구성됨)과 허가가 인쇄되었는지 여부를 나타내는 IsPrinted 특성이 있습니다. 고맙습니다. – Sisyphus

+0

[내 이전 의견을 신경 쓰지 마세요; 그것을 제거했다] 당신이 위에 쓰는 것에서 그것은 다른 주들의 수가 이미 제한되어있는 것처럼 보입니다 (6+ 3). 현재 활성 상태가 스스로 무제한 (또는 매우 큰) 가능한 값을 갖는 매개 변수를 기반으로 선택된다는 사실이 사용자의 상태 수가 제한되지 않는다는 것을 의미하지는 않습니다. –

답변

0

'State'클래스의 정의 된 최대 개수는 없지만 모든 'state'에 대해 'State'클래스를 구현하면 막대한 코드 중복이 발생할 수 있습니다. 이는 자체적으로 문제로 간주됩니다.

참고 할당 된 값의 조합 추상 메소드의 세트를 구현하는 '주'주 패턴 클래스, 동일하지 않다 으로하는 '상태'. 당신이 나에게 묻는다면, '국가'는 그 패턴에서 '행동'이라고 더 잘 부름 받아야한다.

'상태'클래스의 제한된 집합에서 동작을 캡처 할 수있는 경우 (예 : 제한된 수의 코드 행으로 빌드 할 수있는 경우 예 : 그렇습니다) 상태 패턴을 적용 할 수 있습니다. 이미 언급했듯이 하나 이상의 활성 상태를 유지함으로써 상태 패턴을 여러 번 적용 할 수 있습니다.