一位面试官问我:
什么是Observer
和Observable
,我们应该在什么时候使用它们?
我不知道这些术语,所以当我回到家开始谷歌搜索 Observer
和 Observable
时,我从不同的资源中找到了一些要点:
1)
Observable
is a class andObserver
is an interface.2) The
Observable
class maintains a list ofObserver
s.3) When an
Observable
object is updated, it invokes theupdate()
method of each of itsObserver
s to notify that, it is changed.
我找到了这个例子:
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)
方法是干什么用的?
最佳答案
您有一个学生和留言板的具体示例。学生通过将自己添加到希望在有新消息发布到留言板时得到通知的观察者列表中进行注册。当消息添加到消息板时,它会遍历其观察者列表并通知他们事件发生。
想想推特。当你说你想关注某人时,Twitter 会将你添加到他们的关注者列表中。当他们发送新推文时,您会在输入中看到它。在这种情况下,您的 Twitter 帐户就是 Observer,而您关注的人就是 Observable。
这个类比可能并不完美,因为 Twitter 更有可能是一个中介。但它说明了这一点。
关于java - 我们什么时候应该使用 Observer 和 Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744450/