2011-08-03 8 views
1

私が書いているアルゴリズムにテンプレートパターンを使用しました。しかし、それを観察者のパターンと組み合わせて、プロセスについての情報を得ました。 iはオブザーバとテンプレートパターンの組み合わせ

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

findSolution方法とこの抽象クラスは、異なるアルゴリズムの実装によって拡張されることを通知呼び出しアルゴリズムの方法において

public abstract class Test extends Observable 

。 UIは単にテストへの参照を保持し、findSolution()を呼び出しますが、uiの更新メソッドは呼び出されません。

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

観測値が変更されていないため、何も起こりません。

the javadocから:hasChangedメソッドに示されるように、このオブジェクトは、変更された場合

、 は、そのすべてのオブザーバにそのことを通知し、このオブジェクトがもはや変更されたことを示していないためにclearChangedメソッド を呼び出します。

したがって、オブザーバーに通知する前にsetChanged()に電話する必要があります。

+0

ありがとう私はそれを見ていない、それが動作することを知っています。ありがとう。 –

関連する問題