官方定義:定義對象之間的一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並自動更新。
認識觀察者模式:
1、目標與觀察者之間的關系:目標與觀察者之間是一對多的關系。
2、單向依賴:只有目標知道什么時候通知觀察者。
3、命名模式:又稱為發布-訂閱模式,目標接口定義后面跟subject,觀察者接口定義后面跟observer,觀察者接口的更新方法建議為update,方法的參數是根據需要定義的。
4、觸發通知的時機:先改變后通知。
觀察者實現的兩種方式:
1、推模型:目標對象主動向觀察者推送目標的詳細信息,推送的信息通常是目標對象的全部或部分數據。
2、拉模型:目標對象在通知的時候只傳遞少量信息,如果觀察者需要更具體的信息,由觀察者主動到目標對象獲取,相當於是觀察者主動在目標對象中拉數據。
兩種模式的比較:
1、推模型是假定目標對象知道觀察者所需要的數據,而拉模型是目標對象具體需要什么數據,直接把自生傳遞給觀察者,由觀察者來取值,推模型會使觀察者對象難以復用;
2、拉模型下,update方法的參數是對象本身,基本可以適應各種情況的需要。
觀察者的優點:
1、觀察者模式實現了觀察者和目標之間的抽象耦合。
2、觀察者模式實現了動態聯動。
3、觀察者模式支持廣播通信。
觀察者的缺點:
1、可能會引起無畏的操作。
觀察者模式衍生:
如果觀察者有個性化的設置,則需要在通知的時候區別對待。
