談談觀察者模式

傳說,好萊塢有一條規則:別來找我,我會去找你。

觀察者模式,有兩種角色:觀察者,以及通知者(或者叫目標對象)。

當對象間存在一對多關係時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬於行為型模式。

單談概念總是很虛,讓我們來看一個實例:

假設我們有一個商城,有這麼樣一個需求,當商城上架新的商品時,要將產品推送到各個合作商家,偽代碼如下:

談談觀察者模式

那麼,這樣就會有一個問題,當每增加一個合作商家,就有修改這段代碼,這肯定會後期的維護帶來一些問題。

這時候,觀察者模式就派上用場了。

這裡,商城就是我們的通知者,而各個合作商家就是觀察者。

讓我們一步步把這段代碼使用觀察者模式重構。

1.首先定義一個接口,名叫Observer,擁有一個update方法:

談談觀察者模式

這個接口是對各個商家的抽象,我們不關心具體你是哪個商家,只需知道你是一個observer即可。

2.接下來定義我們的商城,它應該擁有一個成員變量,來存儲合作商家。這裡,Shop需要對外暴露一個接口,這個接口可以讓外部註冊觀察者。在本個案例當中,就是合作商家通過這個接口像商城註冊。

談談觀察者模式

3.最後,我們需要一個Product類,沒有具體實現,用來傳遞商品信息。

好,現在讓我們來編寫上架商品通知合作商家的代碼:

談談觀察者模式

我們通過一個線程來模擬這個商城每隔1秒上架一個新商品,並推送給合作商家。

接下來,來編寫兩個合作商傢俱體實現類:

Tmall和Jd:

談談觀察者模式

談談觀察者模式

最後,讓我們來運行下這個商城,並把京東和天貓註冊到商城的觀察者列表裡:

談談觀察者模式

運行結果:

談談觀察者模式


分享到:


相關文章: