1. 程式人生 > >設計模式之觀察者模式

設計模式之觀察者模式

觀察者模式 observer 監聽器的底層實現 observable 群發消息 轉發機制

1、觀察者模式的簡單介紹:


a、核心:

- 觀察者模式主要用於 1 : N 的通知中。當一個對象(目標對象 Subject 或者 Objservable )的狀態變化時,他需要及時告知一系列的對象(觀察者對象,Observer),令他們做出響應。

b、通知觀察者的方式:

推:每次都會把通知以廣播的方式發送給所有的觀察者,所有的觀察者只能夠被動接收。

拉:觀察者只要知道有情況即可。至於什麽時候獲取內容,獲取什麽內容,都可以自主決定。


2、簡單的代碼演示:

a、Subject 類為目標對象類(相當於一個容器,裏面存放了一些的觀察者對象),提供了在主題對象中註冊觀察者對象的方法。ConcreteSubject 為具體的主題對象,裏面提供了一個 stateCode 的成員變量,並且在 setStateCode() 方法中使用父類的 notifyAllObserver() 方法。


技術分享

技術分享


b、創建 Observer 接口,即抽象的觀察者類,並創建一個實現了該接口的 ConcreteObserver 類。(在該類中也有一個 stateCode 的成員變量)


技術分享

技術分享


c、看看 Client16 測試類中的輸出結果以及示例代碼的類圖關系。


技術分享

技術分享


3、使用 javase 提供的 java.util.Observable 和 java.util.Observer 來實現觀察者模式:


-Observable 類是目標類,Observer 接口是觀察者接口,ConcreteSubject 是具體目標類,ConcreteObserver 是具體觀察者類,使用 已經封裝好的方法來實現我們的觀察者模式。

技術分享

技術分享

技術分享


4、開發中常見的場景:


- 聊天室程序的,服務器轉發給所有客戶端

- 網絡遊戲(多人聯機對戰)場景中,服務器將客戶端的狀態進行分發

- 郵件訂閱

- Servlet 中,監聽器的實現

- Android 中,廣播機制

- 京東商城中,群發某商品的打折信息

本文出自 “12392717” 博客,請務必保留此出處http://12402717.blog.51cto.com/12392717/1930067

設計模式之觀察者模式