【发布时间】:2012-02-15 14:25:15
【问题描述】:
我正在尝试设计一个异步框架,并想知道人们认为回调模式与观察者模式的优缺点。
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 来实现,它在侦听器的优先级上有自己的语义以及如何处理事件到每个侦听器的分配,例如为每个侦听器与串行通知生成一个新线程。 (我实际上认为这是一个好主意,因为它很好地分离了关注点,并且是对标准观察者/听众模式的改进)。
你有什么想法应该在什么时候使用它们吗?
谢谢。
【问题讨论】:
-
为了简化回调,我建议您使用一流的函数。所以它只是
public void doAsyncWork(Function callback) -
我对这两种设计模式都很陌生,我对您的代码示例感到非常困惑。你确定这些是这两种模式的正确演示,尤其是观察者模式吗?对我来说,你写它们的方式没有区别。不过不要误会我的意思。我真诚地感谢你的问题,因为我有同样的想法。只是想直截了当。谢谢!
标签: design-patterns asynchronous callback observer-pattern command-pattern