日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《研磨设计模式》chap12 观察者模式observer(2)模式介绍

發布時間:2025/3/21 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap12 观察者模式observer(2)模式介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 兩個步驟

. 注冊

. 通知

2. 推模型和拉模型

  • 推模型
    目標對象主動向觀察者推送目標的詳細信息,不管觀察者是否需要,推送的信息通常是目標對象的全部或部分數據,相當于是在廣播通信。
  • 拉模型
    目標對象在通知觀察者的時候,只傳遞少量信息。如果觀察者需要更具體的信息,由觀察者主動到目標對象中獲取,相當于是觀察者從目標對象中拉數據。一般這種模型的實現中,會把目標對象自身通過update方法傳遞給觀察者,這樣在觀察者需要獲取數據的時候,就可以通過這個引用來獲取了。

推模型是假定目標對象知道觀察者需要的數據;而拉模型是目標對象不知道觀察者具體需要什么數據,沒有辦法的情況下,干脆把自身傳給觀察者,讓觀察者自己去按需取值。
推模型可能會使得觀察者對象難以復用,因為觀察者定義的update方法是按需而定義的,可能無法兼顧沒有考慮到的使用情況。這就意味著出現新情況的時候,就可能需要提供新的update方法,或者是干脆重新實現觀察者。
而拉模型就不會造成這樣的情況,因為拉模型下,update方法的參數是目標對象本身,這基本上是目標對象能傳遞的最大數據集合了,基本上可以適應各種情況的需要。

2.1推模型

public class NewsPaper extends Subject{public void setContent(String content) {this.content = content; notifyObservers(content);} }public interface Observer {//被通知的方法,直接把報紙的內容推送過來 public void update(String content); }public class Reader implements Observer{ public void update(String content) { }public class Subject { protected void notifyObservers(String content) {for(Observer reader : readers){reader.update(content);}} }

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap12 观察者模式observer(2)模式介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。