面试官问我:
什么是Observer,什么Observable时候应该使用它们?
我并不了解这些术语,因此当我回到家并开始使用GoogleObserver和Google搜索时Observable,从不同的资源中发现了一些要点:
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!"); } }
但是我不明白为什么我们需要Observer和Observable?的用途setChanged()``和notifyObservers(message)方法是什么?
Observer
Observable
setChanged()``和notifyObservers(message)
您有一个学生和一个留言板的具体示例。学生将自己添加到希望在新消息发布到MessageBoard时得到通知的观察者列表中进行注册。将消息添加到MessageBoard时,它将遍历其Observers列表,并通知他们事件已发生。
想想Twitter。当您说要关注某人时,Twitter会将您添加到他们的关注者列表中。当他们发送新推文时,您会在输入中看到它。在这种情况下,您的Twitter帐户是观察者,而您关注的人是观察者。
这个类比可能并不完美,因为Twitter更可能是调解人。但这说明了这一点。