正在和一位同事聊聊Javas图书馆的设计。我提到我总是觉得很有趣的是AWT / Swing类调用它实际上在UI小部件上提供了一个Observable接口实际上被称为“监听器”。
因此,他指出与java.util.Observer和java.util.Observable之间存在名称冲突,这与JDK 1.0以来一直存在冲突。我以前从未听说过他们。
JavaDocs中没有列出任何用法,google / googlecode没有提供太多用法,所以有人知道它们是否在JDK的某个地方使用过吗?他们似乎没有收到任何通用的爱,所以可能他们并不“受欢迎”。有人发现它们有用吗?
答案 0 :(得分:22)
它们没有被使用,因为它们的设计存在缺陷:它们不是type safe。您可以将任何实现Observer的对象附加到任何Observable,这可能会导致细微的错误。
将它们包装在类型安全的界面中与从头开始实现模式的工作量大致相同,所以我想在大多数情况下后者是首选。
由于在时间压力下做出的次优设计选择(其他包括Java 1.0 Collection API和java.util.Date),这是Java 1.0中存在缺陷的事情之一,但由于公共API的性质,它永远不会不再被删除(仅限弃用)。
答案 1 :(得分:14)
Observer
和Observable
仍然在许多Eclipse向导代码中用于检测输入框中的内容何时发生更改,因此可以更新向导本身。我不得不使用其中的一些东西,根据自己的需要改变它......:)