我注意到我的大部分代码都是围绕回调构建的。这被认为是“设计缺陷”吗?我应该遵循更好的设计模式吗?
Geo
问问题
1108 次
6 回答
7
我想您可以将观察者模式视为类似于回调的东西。你检查过它们吗?
在Pragmatic Programmer一书中,他们提到了一个人等待登机的例子。与其不断询问值机柜台她是否可以登机(投票),不如说当航班准备好时,值机柜台会向所有感兴趣的人公开宣布。
此示例的伪代码可能如下所示:
class Clerk implements CheckInNotifyer {
BunchOfObservers observers = new Bunch();
public void addObserver(CheckInObserver observer) {
observers.add(observer);
}
private void notifyListeners() {
observers.all.notifyCheckIn(new CheckInEvent());
}
}
class Passenger implements CheckInObserver {
public void notifyCheckIn(CheckInEvent event) {
event.getPlane().board();
}
}
class WaitingArea {
public init() {
Passenger passenger = new Passenger();
Clerk clerk = new Clerk();
clerk.addObserver(passenger);
}
}
于 2009-02-26T17:35:57.440 回答
4
它也被称为事件驱动编程。
于 2009-02-26T18:07:03.623 回答
3
当您有多个带有回调的过程时,另一个特别有效的选择是使用 WaitHandles。
于 2009-02-26T17:37:22.773 回答
3
这还不错,它只是用非函数式语言进行函数式编程的唯一方法。
于 2009-02-26T18:03:04.880 回答
1
这取决于。对于 Javascript,我更喜欢观察者模式,因为它可以真正知道触发的事件——主要是因为您可以注册和管理多个观察者。但是对于像 AJAX 调用这样的东西,将其包装在一个闭包中并包含回调方法似乎是最干净的方法。
于 2009-02-26T18:04:54.377 回答
-1
在面向对象的语言中,我发现多态性更“干净”(没有强制转换和混乱的函数类型声明)和更面向对象的方法(从接口派生)来实现回调提供的功能。
于 2009-03-01T11:05:43.173 回答