設計模式之監聽模式(觀察者模式與監聽模式區別)


一,類的四大基本關系: 

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM