2010-05-17 3 views
4

몇 가지 방법이 완료된 후 개체 (및 상태)의 발전에 대한 디자인 문제가 있습니다. 피드백에 기반하여 질문을 정리해야 할 수도 있습니다.다양한 상태에서 객체 (작업)를 표현하는 디자인 패턴이 있습니까?

분류 자 ​​이라는 개체를 고려하십시오. 그것은 다음과 같은 방법이 있습니다 :

void initialise() 
void populateTrainingSet(TrainingSet t) 
void pupulateTestingSet(TestingSet t) 
void train() 
void test() 
Result predict(Instance i) 

제 문제는 특정 순서로 호출해야하는 것입니다. 더욱이, 일부 메소드는 이전 메소드가 호출 될 때까지 유효하지 않으며 메소드가 호출 된 후 일부 메소드가 유효하지 않습니다. 예를 들어, test()가 호출되기 전에는 predict()를 호출 할 수 없으며 test()가 호출 된 후 train()을 호출하는 것은 유효하지 않습니다.

내 접근 방식은 지금까지 현재 stateof에게 개체를 나타내는 개인 열거 유지하는 것이 었습니다 :

private static enum STATE{ NEW, TRAINED, TESTED, READY}; 

을하지만이 비트 cloogy을 보인다. 그런 문제 유형에 대한 디자인 패턴이 있습니까? 어쩌면 뭔가 템플릿 방법과 관련이 있습니다.

답변

2

글쎄,이 특별한 경우에, 나는 당신이 여기 over-design하다고 생각한다. 예를 들어, 훈련 데이터 세트와 테스트 데이터 세트를 유형별로 구분해야합니까? 내 제안은 공장 패턴과 함께 갈 것입니다; "test"또는 "predict"를 수행 할 수있는 가설 개체를 반환하는 "train"함수가있는 MachineLearningAlgorithm 팩토리가 있어야합니다. "train"함수는 훈련 데이터 세트를 매개 변수로 취해야하며 "test"함수는 테스트 데이터 세트를 매개 변수로 가져야합니다. 두 데이터 세트는 그 안에 포함 된 데이터가 다르더라도 형식/구조가 동일하기 때문에 아마 같은 유형이어야합니다. 데이터 집합을 채우는 데있어, 실제로는 컴퓨터 학습 알고리즘의 관심사가되어서는 안됩니다. 알고리즘을 사용하는 사람은 해당 데이터 세트를 제공해야합니다. 당신이 예제 데이터 세트의 일종을 갖고 싶다면, 나는 여러가지 다른 열차/테스트 데이터 세트 쌍을위한 공장을 제안 할 것이다.

public interface Result 
{ 
     public double getDecisionValue(); 
     public String getPredictedLabel(); 
} 

public interface TestResult extends Result 
{ 
     public String getActualLabel(); 
} 

public interface TestResults extends Iterable<TestResult> 
{ 
     public int getErrorCount(); 
     public double getErrorRate(); 
} 

public interface Hypothesis 
{ 
     public TestResults test(Iterable<DataPoint> dataset, Iterable<String> labels); 
     public Result predict(DataPoint datapoint); 
} 

public interface MachineLearningAlgorithm 
{ 
     public Hypothesis train(Iterable<DataPoint> trainset, Iterable<String> trainlabels); 
} 
2

나는 상태 디자인 패턴이 당신을 도울 수 있다고 생각합니다. 각 상태에 대해, 당신은 당신의 방식으로 그런 메소드를 구현하는 클래스를 만들고 필요없는 메소드는 예외를 던지거나 아무것도하지 않을 수 있습니다. 메인 클래스에는 상태에 따라 바뀔 상태 객체가 포함될 수 있습니다. 그것은 당신에게 적합한가요? State Design pattern

2

예, 유한 상태 시스템은 개체의 상태와 개체가 주어진 상태에서 수행하게 될 동작을 나타냅니다.

this 위키 피 디아 문서에는 몇 가지 아주 좋은 예가 있습니다.

관련 문제