2011-08-03 6 views
1

필자가 쓰고있는 알고리즘에 템플릿 패턴을 사용했다. 그러나 관찰자 패턴과 결합하여 프로세스에 대한 정보를 얻었습니다. 난 호출 알고리즘 방법에서 템플릿 패턴과 결합 된 옵저버

public abstract class Test extends Observable 

public final void findSolution() { 
// run algorithm 
notifyObservers(); 
} 

findSolution 법이 추상 클래스는 서로 다른 알고리즘을 구현함으로써 확장 될 통지. UI는 단지 Test에 대한 참조를 유지하고 findSolution()을 호출하지만 UI의 update 메소드는 호출되지 않습니다.

public class CreateViewResults implements Observer { 
private Test algorithm; 

public CreateViewResults() { 
    algorithm = new OneTestImpl(); 
    algorithm.addObserver(this); 
    algorithm.findSolution(); 
} 

@Override 
public update(Observable ob, Object o) { 
    System.out.println("Update"); 
} 

} 
+0

OneTestImpl에 대한 코드를 표시해야합니다. 내 첫 번째 추측은 OneTestImpl.findSolution이 super 나 notifyObservers를 호출하지 않는다는 것입니다. – Jay

+0

@Jay : OneTestImpl.findSolution은 Test에서 상속되며 최종본이기 때문에 재정의 할 수 없습니다. –

+0

@JB 니츠 : 좋은 지적입니다. 나는 그것을 놓쳤다. – Jay

답변

4

관찰 가능 항목이 변경되지 않았기 때문에 아무런 변화가 없습니다.

the javadoc에서 : hasChanged 메소드에 나타나도록 (듯이)이 객체가 변경된 경우

, 은 그 모든 옵저버를 통지 한 후이 객체가 이미 변경된 상태가 아닌 것을 나타냅니다에 clearChanged 방법 를 호출합니다.

옵서버에게 알리기 전에 setChanged()으로 전화해야합니다.

+0

감사합니다. 나는 그것을 보지 못했지만 그것이 작동한다는 것을 알았습니다. 고마워. –