這是《Head First Design Pattern》里面介紹的第二個Pattern,叫做Observer Pattern,其核心概念就是一種一對多的關(guān)系。
其中的“一”,類似于定報紙系統(tǒng)的發(fā)送方,而“多”就是訂閱方。當(dāng)有新的“報紙”時,發(fā)送方將最新的報紙送達(dá)訂閱方手中。發(fā)送方維護(hù)著一個訂閱方的列表。
文中通過一個氣象站的例子來解說這個模式。WeatherData實現(xiàn)Subject接口,里面包括所要傳送的private 數(shù)據(jù),還有注冊Observer和去除Observer的方法。當(dāng)數(shù)據(jù)有所更新時調(diào)用measurementChanged方法,這個方法再調(diào)用notifyObservers方法。
而在Observer那端,有一個subject對象的私有數(shù)據(jù),通過構(gòu)造函數(shù)將要注冊的Subject作為參數(shù)來對它進(jìn)行初始化,以此建立Observer和Subject的聯(lián)系。
最后還介紹了java那建的Observer模式。通過繼承Observable來成為Subject,通過實現(xiàn)Observer接口來成為Observer。但其有一定弊病,因為java不支持多繼承,這就限制了使用這個模式的靈活性。所以我覺得以后如果真的用到Observer模式還是自己編程比較好。