一位面试官问我:
什么是Observer以及Observable何时应该使用它们?
Observer
Observable
我不知道这些术语,所以当我回到家开始谷歌搜索ObserverandObservable时,我从不同的资源中找到了一些要点:
1)Observable是一个类,Observer也是一个接口。 2)Observable该类维护一个Observers 列表。 3)当一个Observable对象被更新时,它调用它update()的每个Observers的方法来通知它,它被改变了。
1)Observable是一个类,Observer也是一个接口。
2)Observable该类维护一个Observers 列表。
3)当一个Observable对象被更新时,它调用它update()的每个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!"); } }
但我不明白为什么我们需要Observerand Observable?setChanged()和notifyObservers(message)方法是干什么用的?
setChanged()
notifyObservers(message)
您有一个学生和留言板的具体示例。学生通过将自己添加到希望在新消息发布到留言板时得到通知的观察者列表中进行注册。当一条消息被添加到消息板时,它会遍历它的观察者列表并通知他们事件发生了。
想想推特。当你说你想关注某人时,Twitter 会将你添加到他们的关注者列表中。当他们发送新推文时,您会在输入中看到它。在这种情况下,您的 Twitter 帐户就是 Observer,而您关注的人就是 Observable。
这个类比可能并不完美,因为 Twitter 更可能是一个中介。但它说明了这一点。