面試官問(wèn)我:什么是Observer,什么Observable時(shí)候應(yīng)該使用它們?我不知道這些術(shù)語(yǔ),所以當(dāng)我回到家并開(kāi)始搜索Observer和時(shí)Observable,從不同的資源中發(fā)現(xiàn)了一些要點(diǎn):1)Observable是一個(gè)類(lèi),Observer是一個(gè)接口。2)Observable該類(lèi)維護(hù)一個(gè)Observers 列表。3)當(dāng)一個(gè)Observable對(duì)象被更新時(shí),它調(diào)用其update()每個(gè)Observers 的方法來(lái)通知它已被更改。我發(fā)現(xiàn)了這個(gè)例子: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)方法是什么?
3 回答

慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
您有一個(gè)學(xué)生和一個(gè)留言板的具體示例。學(xué)生將自己添加到希望在新消息發(fā)布到MessageBoard時(shí)得到通知的觀察者列表中進(jìn)行注冊(cè)。將消息添加到MessageBoard時(shí),它將遍歷其Observers列表,并通知他們事件已發(fā)生。
想想Twitter。當(dāng)您說(shuō)要關(guān)注某人時(shí),Twitter會(huì)將您添加到他們的關(guān)注者列表中。當(dāng)他們發(fā)送新推文時(shí),您會(huì)在輸入中看到它。在這種情況下,您的Twitter帳戶(hù)是觀察者,而您關(guān)注的人是觀察者。
這個(gè)類(lèi)比可能并不完美,因?yàn)門(mén)witter更可能是調(diào)解人。但這說(shuō)明了這一點(diǎn)。
- 3 回答
- 0 關(guān)注
- 415 瀏覽
添加回答
舉報(bào)
0/150
提交
取消