讀《Head First Design Patterns》(第二章 觀察者模式)
本書通過(guò)一個(gè)網(wǎng)絡(luò)氣象站的實(shí)例來(lái)闡述觀察者模式,首先從定義來(lái)看:
The Observer Pattern defines a one-to-many dependency between objects so that when one object changes states,all its dependents are notified and updated automatically.
沒(méi)錯(cuò),我覺(jué)得這種模式是針對(duì)一對(duì)多的情況,對(duì)象間通信的實(shí)現(xiàn)。而且是通過(guò)接口實(shí)現(xiàn)松耦合。其整個(gè)結(jié)構(gòu)和過(guò)程可以通過(guò)下圖一覽無(wú)余:
![]()
將發(fā)布者抽象到一個(gè)Subject接口,該接口要求實(shí)現(xiàn)(registerObserver,removeObserver,notifyObservers)三個(gè)方法。而將觀察者抽象到Observer接口要求實(shí)現(xiàn)(update)方法。在Subject的具體類中通過(guò)一個(gè)觀察者列表來(lái)對(duì)觀察者進(jìn)行管理(registerObserver,removeObserver),在notifyObservers通過(guò)調(diào)用觀察者的(update)來(lái)實(shí)現(xiàn)對(duì)觀察者的通知。
而在觀察者的具體類的構(gòu)造函數(shù)中調(diào)用發(fā)布者的registerObserver來(lái)將自己注冊(cè)到發(fā)布者,于是這個(gè)一對(duì)多的自動(dòng)同步模式就搭建起來(lái)了。
這里后面還提到了java中內(nèi)建的對(duì)觀察者模式的支持,讓人感覺(jué)java不愧是真正的面向?qū)ο蟮恼Z(yǔ)言,考慮得這么周到。主要通過(guò)“import java.util.Observable;import java.util.Observer;”來(lái)實(shí)現(xiàn)的,如下圖:
![]()
不過(guò)正在我為之感嘆的時(shí)候,本書提醒我們,java的這種內(nèi)建支持的局限性,就是其中的Observable是一個(gè)類而不是接口,所以只有從其繼承才能使用。大大限制了其作用。
好了,不早了,這篇總結(jié)終于把大致的意思整理出來(lái)了,作為日后溫故之用。不早了,睡覺(jué)了。![]()

浙公網(wǎng)安備 33010602011771號(hào)