設計模式 ----Observer 模式(對象的行爲模式)
解決問題: 一個軟件系統常常要求在某個對象的狀態發生變化的時候 ,某些其他的對象做出相應的改變 。
同樣能實現此功能: 做到這一點的設計方案有很多
比較: 觀察者模式使系統能夠易於複用 (低耦合的設計方案)。觀察者模式是滿足這一要求的各種設計方案中最重要的一種 。
一、簡介
又叫發佈 - 訂閱模式、模型 - 視圖模式、源 - 監聽器模式、從屬者模式。
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對需昂同時監聽某一個主題對象。這個主題對象 在狀態上發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。
二、觀察者模式的結構
1 、類圖
類圖(一)
傳統模式類圖
類圖(二)
Java 語言提供的觀察者模式的支持屬於此種結構。
傳統實現方案
2 、角色
抽象主題角色(抽象類或者接口)((觀察者對象的聚集);添加、刪除觀察者對象;更新(執行聚集中 所有觀察者對象的 update 方法))
抽象觀察者角色(更新接口)
具體主題角色
具體觀察者角色
3 、另一種實現方案
聚集管理方法本身就是所有具體主題角色所共有的,因此將這些方法連同聚集本身可以移植到抽象主題角 色中。同樣,由於 notifyObserver() 方法依 賴於聚集對象,也可以移植到抽象主題角色中。
三、 Java 語言提供的對觀察者模式的支持
在 Java 語言的 java.util 庫裏面,提供了一個 Observable 類以及一個 Observer 接口,構成 Java 語言對觀察者模式的支持。
四、優缺點
優點
1、 觀察者模式在被觀察者和觀察者之間建立一個抽象的耦合。
2、 觀察者模式支持廣播通信。
缺點
1、 很多觀察者,都通知到會花費很多時間。
2、 被觀察者之間循環依賴,可能導致系統崩潰。
3、 通知通過另外的縣城進行異步投遞的話,系統必須保證投遞是以自恰的方式進行。
4、 觀察者模式沒有相應的機制使觀察者知道所觀察的對象是怎麼發生變化的。