定義:定義物件間一種一對多的依賴關係,使得每當乙個物件發生變化時,則所有依賴於他的物件都會得到通知並自動更新。
使用場景
特點:實現物件的解耦,將觀察者和被觀察者完全隔離,只依賴於observe和observable抽象。
簡單實現例子
/**
* 抽象觀察者類,為所有具體觀察者定義乙個介面,在得到通知時更新自己
*/public inte***ce observer
/**
* 抽象被觀察者類
*/public inte***ce observable
/**
* 具體的觀察者類,也就是訂閱者
*/public class user implements observer
// 訂閱者的名字private string name;
public user(string name)
}
/**
* 具體的被觀察者類,也就是訂閱的節目
*/public class teleplay implements observable
}@overridepublic void register(observer observer)
}
public class client
}
列印結果:
小明,***電視劇集更新了!
小光,***電視劇集更新了!
小蘭,***電視劇集更新了!
observe 和observable都是jdk中的內建型別,可見觀察者模式非常重要。達到一對多的通知功能,通知系統都是依賴observe 和observable的。
安卓中使用的觀察者模式
首先在android中,我們往listview新增資料後,都會呼叫adapter的notifydatachanged()方法,其中使用了觀察者模式。
當listview的資料發生變化時,呼叫adapter的notifydatasetchanged函式,這個函式又會呼叫datasetobservable的notifychanged函式,這個函式會呼叫所有觀察者( )的onchanged方法,在onchanged函式中又會呼叫listview重新布局的函式使得listview重新整理介面。
android中應用程式傳送廣播的過程:
學習設計模式 觀察者模式
說明 觀察者模式就是有兩個角色,乙個觀察者 乙個通知者,兩者的關係是多對一。當某個是事件觸發時,通知者通知觀察者去處理相應的事件。為了解耦合,需要將兩個角色都先抽象,然後再定義具體的實現類。缺點 需要所有觀察者處理相應事件名稱一致 需求 學生自習的時候開小差,需要代表時刻觀察老師是否來了,如果來了,...
設計模式學習 觀察者模式
觀察者模式就是某種事件發生之後,被觀察者收到訊號,通知註冊的觀察者進行邏輯處理,一般遊戲開發中任務和成就多是類似實現。簡單示例 pragma once include using namespace std const int max observer num 100 enum class even...
設計模式學習 觀察者模式
觀察者模式 observer pattern 是一種 發布者 訂閱者 的模式.有時候也被稱為 模型檢視模式 源 監聽者模式 等.在這種模式中,由乙個目標物件來管理所有依賴與它的觀察者物件,並且當這個目標物件自身發生改變時,會主動向它的觀察者們發出通知.介面,讓weatherdata 來實現 publ...