觀察者模式在實際應用中非常多,觀察者模式定義了一種一對多關係,這樣使得其中的一發生變化時會通知到多。觀察者模式類圖如下:
Obsserver:抽象觀察者接口,通常會定義一個更新接口,使得被觀察者發生更新時能夠更新具體觀察者。
ConcreteObserver:具體觀察者,實現了Obsserver接口,被觀察者發生更新時會更新自身狀態。
Subject:抽象主題即被觀察者,通常會定義添加觀察者、刪除觀察者及通知發佈接口。
ConcreteSubject:具體主題,將觀察者註冊到內部,發生變化時給註冊的觀察者發送消息。
雖然類圖定義如上,但是時間應用中不會嚴格按照上述模式進行,設計模式其實是一種重情景化的方法論。觀察者模式在實際應用中非常廣,也非常重要以至於JDK util中都實現了這種模式。觀察者模式通常適合系統間的消息交互,尤其是換聯網系統中的消息系統,也適應與系統間信息的多級傳遞
優點:有利於系統間解耦合,是耦合的雙方依賴於抽象而不依賴於具體,這樣耦合的雙方一方發生變化也不會影響到另一方。
缺點:系統開發調試過程中變得複雜,尤其是觀察者非常多時再通知觀察者過程中會存在性能問題,不多實際應用中大多數都是採用異步觸發,比如消息系統中的發佈訂閱都是異步執行。