目錄
觀察者模式定義
觀察者模式定義:定義了對象之間一對多的依賴,讓多個觀察者對象同時監聽一個主題對象,當主題對象發生變化時,它的所有依賴者都會收到通知並更新
適用場景:關聯行爲場景,建立一套觸發的機制
優點:觀察者和被觀察者之間建立了一套抽象的耦合,支持廣播通信
缺點:觀察者之間有過多的細節依賴,提高了時間的消耗和程序的複雜度;使用時應該梳理清楚調用關係,避免重複調用
觀察者模式使用案例
觀察者模式在工作種使用較多,sring框架提供了spring event(spring 事件)來處理同一jvm的事件通知業務,注意是同一jvm。
SpringEvent的使用十分簡單,核心內容爲創建繼承了ApplicationEvent的事件、調用ApplicationEventPublisher發送事件、接收者實現ApplicationListener方法接收事件。使用分爲以下三個步驟:
聲明事件(繼承ApplicationEvent類)
public class UserRegisterEvent extends ApplicationEvent {
private static final long serialVersionUID = -4829855648590354032L;
public UserRegisterEvent(User user) {
super(user);
}
public User getUser() {
return (User) source;
}
}
發送事件(調用ApplicationEventPublisher的publishEvent方法發送事件)
@Autowired
private ApplicationEventPublisher publisher;
@Override
public void register(User user) throws Exception {
publisher.publishEvent(new UserRegisterEvent(user));
}
監聽器接收事件(新建監聽類,實現ApplicationListener接口,實現onApplicationEvent方法)
public class CouponListener implements ApplicationListener<UserRegisterEvent> {
@Override
public void onApplicationEvent(UserRegisterEvent event) {
System.out.println(event.getUser());
}
}
當被監聽者發佈事件後,監聽者會收到事件。二者解耦,互相不需要關注業務是否處理成果。
spring-event 源碼解析: springEvent 源碼分析