【发布时间】:2012-11-24 12:45:03
【问题描述】:
一位面试官问我:
什么是Observer 和Observable,我们应该在什么时候使用它们?
我不知道这些术语,所以当我回到家开始在 Google 上搜索 Observer 和 Observable 时,我从不同的资源中找到了一些要点:
1)
Observable是一个类,Observer是一个接口。2)
Observable类维护Observers 的列表。3) 当
Observable对象更新时,它会调用其每个Observers 的update()方法来通知它已更改。
我找到了这个例子:
import java.util.Observable;
import java.util.Observer;
class MessageBoard extends Observable
{
public void changeMessage(String message)
{
setChanged();
notifyObservers(message);
}
}
class Student implements Observer
{
@Override
public void update(Observable o, Object arg)
{
System.out.println("Message board changed: " + arg);
}
}
public class MessageBoardTest
{
public static void main(String[] args)
{
MessageBoard board = new MessageBoard();
Student bob = new Student();
Student joe = new Student();
board.addObserver(bob);
board.addObserver(joe);
board.changeMessage("More Homework!");
}
}
但我不明白为什么我们需要Observer 和Observable? setChanged() 和 notifyObservers(message) 方法有什么用?
【问题讨论】:
-
链接无效。 @Androider 你能提供更新的链接吗?
-
如果你使用的是 Java 6 或更高版本,那么试试这个dzone.com/articles/java-ee6-events-lightweight
-
我强烈建议阅读this book 以更好地理解设计模式。它看起来很傻,但它是一个很好的学习工具。
-
请大家注意; Observer/Observable 在 Java 9 中已弃用。替代方案:stackoverflow.com/questions/46380073/…
标签: java design-patterns observable observer-pattern observers