"는 작업 항목의 상태에 따라"국가 디자인 패턴을
한 가지 방법을 제공하거나 다른, 당신은 당신이 인터페이스 결국 클라이언트 계약을 깰 리팩토링해야합니다.
문제점을 올바르게 이해했다면 WorkItem의 상태가 에 따라 변경되는 WorkItemProcessor가 있습니다.
따라서 귀하의 WorkItemProcessor는
// Context
public class WorkItemProcessor
{
public IState CurrentState { get; set; }
public WorkItemProcessor(IState initialState)
{
CurrentState = initialState;
}
public void Process(WorkItem workItem)
{
CurrentState.Handle(this, workItem);
}
}
그런 다음 우리가 WorkItemProcessor이 잠재적으로 WorkItem에서이
// Request
public class WorkItem
{
public bool CompletenessConditionHoldsTrue { get; set; }
public bool CancelConditionHoldsTrue { get; set; }
}
이 모두 넣으려면 같은데 가정
// State Contract
public interface IState
{
void Handle(WorkItemProcessor processor, WorkItem item);
}
// State One
public class CompleteState : IState
{
public void Handle(WorkItemProcessor processor, WorkItem item)
{
processor.CurrentState = item.CompletenessConditionHoldsTrue ? (IState) this : new CancelState();
}
}
// State Two
public class CancelState : IState
{
public void Handle(WorkItemProcessor processor, WorkItem item)
{
processor.CurrentState = item.CancelConditionHoldsTrue ? (IState) this : new CompleteState();
}
}
될 수 있다는 것을 여러 상태를 정의된다 함께
static void Main()
{
// Setup context in a state
WorkItemProcessor processor = new WorkItemProcessor(new CancelState());
var workItem1 = new WorkItem { CompletenessConditionHoldsTrue = true };
var workItem2 = new WorkItem { CancelConditionHoldsTrue = true };
// Issue requests, which toggles state
processor.Process(workItem1);
processor.Process(workItem2);
Console.Read();
}
희망이 있으면 가까이 갈 수 있습니다. 건배.