觀察者模式三要素: 目標-->貓 觀察者--->老鼠、人 事件-- >貓大叫一聲 java
目標內部有個容器,註冊觀察者spring
在java.util中observable實現了觀察者模式,有個vector類屬性是一個數組,把全部觀察者都放在裏面 .有個observer(觀察者).update方法觸發本身的行爲,觀察是須要註冊,經過obs.addElement()方法註冊,當發生事件的時候, 去通知觀察者,有個notify方法. 編程
發佈訂閱模式是觀察者模式衍生出來的數組
四要素 發佈者 訂閱者 事件 事件通道 多線程
事件驅動編程最好的方法論是發佈訂閱模式 app
在java.util.中提供了eventlisten接口,對事件編程的接口線程
spring支持:3d
applicationcontext 繼承applicationEventPublisher 接口(對事件的支持),有兩個方法上面是對容器內部的server
有兩個方法 第一個是對容器內部事件, 第二個是對業務事件,容器內部事件就是容器的生命週期blog
預約酒店業務 ,下訂單是核心業務,發送短息和發送郵件是增值業務,在酒店類中不該該混合着發送短信和發送郵件業務用事件綁定在一塊兒,不符合單一職責
正確的代碼: 在酒店類中 注入 applicationContext ,調用publishEvent*()方法, 在短信類和郵件類方法上加@EventListenner 註解被消費
在配置文件加上事件廣播器
上圖就是事件通道神祕人物,利用多線程,保證在運行期解耦,主線程作主業務,其它線程作副業務.