2011-08-03 31 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 Nizet:好点。我错过了。 – Jay

回答

4

没有任何反应,因为observable没有改变。

the javadoc

如果该对象发生了变化,由hasChanged方法指示, 则通知其所有观察者,并调用clearChanged方法 ,表明该对象不再改变。

因此,您在通知观察员之前应该致电setChanged()

+0

谢谢我只是没有看到它,知道它的作品。谢啦。 –