設計模式是一些能使編程更加簡單,更擁抱變化的方法。java
1、觀察者模式編程
一、先改變狀態再通知,否則會出現目標對象狀態和觀察者收到的信息不一致的問題。設計模式
二、拉模型和推模型:spa
拉模型是目標對象把整個對象都傳遞給觀察者這讓觀察者本身取須要的數據。
設計
推模型是目標對象根據觀察者的須要,只把觀察者須要的數據傳遞給觀察者。
對象
拉模型兼容性更好,更健壯。好比加一個觀察者須要的參數跟別的參數不同了拉模型不須要改原有代碼,只須要新加一個觀察者就好了,可是推模型就得該已有的觀察者的update方法了。
接口
三、java實現與本身實現觀察者模式的區別:兼容性
a、不予要再定義觀察者和目標藉口了,由於觀察者模式的接口都是同樣的徹底能公用一個。
原理
b、使用java的實現,具體的目標裏面不須要再維護觀察者的註冊信息了,在java的Observable裏面已經幫忙實現好了,由於在觀察者模式中該方法的實現都是同樣的既然觀察者的接口已經定義好了則該方法也能實現了
date
c、處罰通知的方式有一點變化,要先調用setChanged方法,這個是java爲了幫助實現更精確的觸發控制而實現的(具體原理還不清楚)
d、具體觀察者的實現裏面,update方法其實其實能同時支持推模型和拉模型,這個java在定義的時候就考慮好了。
四、觀察者的缺點:
可能會引發無謂的操做。
五、什麼時候使用觀察這模式:
a、當一個抽象模型有兩個方面,其中一個方面的操做依賴於另外一個方面的狀態變化
b、若是在更改一個對象的時候,須要同時連帶改變其餘的對象,並且不知道有多少對象須要被連帶改變對象。
c、當一個對象必須通知其餘對象,可是又不但願這個對象和其餘被它通知的對象是鬆耦合的。