私は非同期フレームワークを設計しようとしていますが、コールバック パターンとオブザーバー パターンの長所/短所について人々が考えていることを知りたいと思っていました。
Callback pattern:
//example callback
public interface Callback{
public void notify(MethodResult result);
}
//example method
public class Worker{
public void doAsyncWork(Callback callback){
//do work
callback.notify(result);
}
}
//example observer pattern
public interface EventListener{
public void notify(MethodResult result);
}
public class Worker{
private EventListener listener;
public registerEventListener(EventListener listener){
this.listener=listener;
}
public void doAsyncWork(){
//do work
listener.notify(result);
}
}
私は、これらのパターンの両方を使用しているように見えるフレームワークを使用しています。EventListener パターンは、リスナーのリストがないため、一般的なパターンではありません。これは、リスナーの優先順位に関する独自のセマンティクスを持つ CompositeListener を作成することで簡単に実装できます。また、各リスナーへのイベントの配布を処理する方法 (各リスナーとシリアル通知に対して新しいスレッドを生成する方法など) もあります。(私は実際に、これは良い考えだと思います。これは、懸念事項を適切に分離し、標準のオブザーバー/リスナー パターンを改善したものだからです)。
それぞれをいつ使用すべきかについて何か考えはありますか?
なるほど。