1. 程式人生 > >觀察者模式和監聽者模式

觀察者模式和監聽者模式

一,類的四大基本關係:

a.關聯關係:如A類呼叫B類。

b.繼承關係:如A類是B類的父類。

c.聚合關係:如裝橘子的箱子,箱子是否存在與裡面裝沒裝橘子沒有任何關係,也就是說橘子不會影響箱子的存在。

d.組合關係:如一個小組,小組是否存在與小組中是否有組員是息息相關的,如果沒有組員,小組就不存在了。

監聽器模式:事件源經過事件的封裝傳給監聽器,當事件源觸發事件後,監聽器接收到事件物件可以回撥事件的方法

觀察者模式:觀察者(Observer)相當於事件監聽者,被觀察者(Observable)相當於事件源和事件,執行邏輯時通知observer即可觸發oberver的update,同時可傳被觀察者和引數
二,監聽模式

當事件源物件上發生操作時,將會呼叫事件監聽器的一個方法,並在呼叫該方法時把事件物件傳遞過去。
這裡寫圖片描述
三,監聽模式的使用例項
這裡寫圖片描述]![這裡寫圖片描述
四,觀察者模式與監聽模式的區別
這裡寫圖片描述
1. 事件-監聽機制
事件源經過事件的封裝傳給監聽器,當事件源觸發事件後,監聽器接收到事件物件可以回撥事件的方法。
這裡寫圖片描述
2. 觀察者模式
觀察者(Observer)相當於事件監聽者(監聽器),被觀察者(Observable)相當於事件源和事件,執行邏輯時通知observer即可觸發oberver的update,同時可傳被觀察者和引數。簡化了事件-監聽模式的實現
這裡寫圖片描述
3.對比

(1) 從uml圖上也可以看出,Observer的實現相對簡單,event-listener需要實現三個角色,observer-observable需要實現兩個角色。

(2)Observable的api已經把對觀察者的註冊,刪除等定義好了,而且是執行緒安全的。而event-listener需要使用者自己實現。

(3)兩者都需要自己定義並實現觸發事件的通知。但Observable需要注意要在通知Observer之前呼叫jdk提供的setChanged()。

(4)event-listener是傳統的c/s介面事件模型,分事件源和事件(狀態)角色,事件源要經過事件的包裝、成為事件的屬性之一再傳遞給事件監聽/處理者,這個事件監聽者就相當於觀察者。Observer更簡潔一些。兩者在思想上是統一的,很多框架仍然使用了event-listener模式,比如spring框架的ApplicationEvent,ApplicationListener。