亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

觀察者模式

GerryZhang JAVA開發工程師
難度中級
時長 1小時56分
學習人數
綜合評分9.53
113人評價 查看評價
9.7 內容實用
9.6 簡潔易懂
9.3 邏輯清晰
  • 基本骨架:

    Subject

    abstract?class?Subject?{
    ????private?List<Observer>?observerList?=?new?ArrayList<>();
    ????
    ????public?void?attach(Observer?o){observerList.add(o);}
    ????public?void?detach(Observer?o){observerList.remove(o);}
    ????public?void?inform(){observerList.forEach(o?->?o.update(this));}
    }

    Observer

    interface?Observer?{
    ????void?update(Subject?subject);
    }


    簡單模擬實現:

    具體事物

    class?ConstructSubject?extends?Subject?{
    ????private?String?status;
    ????
    ????public?String?getStatus(){return?status;}
    ????
    ????public?void?setStatus(String?status){
    ????????this.status?=?status;
    ????????this.inform();?//?事物發生變化,通知更新
    ????}
    }


    觀察者實現

    class?ConstructObserver?implements?Observer?{
    ????String?status;
    
    ????@Override
    ????public?void?update(Subject?subject)?{
    ????????this.status?=?((ConstructSubject)subject).getStatus();
    ????}
    }

    總結:Subject在設計模式中占主動地位,Observer可輔助Subject進行額外功能處理

    查看全部
  • Subject : 觀察源事物,可添加或刪除自身觀察者

    Observer : 觀察者,可接受事物的通知

    當事物發生更新變動,則通知觀察者做相應處理,另事物狀態與觀察者狀態保持一致

    查看全部
  • 創建、注冊階段

    查看全部
  • 客戶端操作

    查看全部
  • 觀察者實現的兩種模式:

    https://img1.sycdn.imooc.com//5afdfb420001064505430200.jpg

    https://img1.sycdn.imooc.com//5afdfa6c0001b41905970322.jpg

    區別:

    1. 推模型假定目標知道觀察者需要的數據

    2. 拉模型不知道目標對象需要什么數據,把自身傳遞給觀察者,由觀察者取值

    3. 推模型使觀察者對象復用性比較差

    查看全部
  • 使用觀察者模式的情況

    查看全部
  • 適用情況:

    查看全部
  • 優點: 1,觀察者模式實現了觀察者和目標之間的抽象耦合; 2,觀察者模式實現了動態聯動 3,觀察者模式支持廣播通信 缺點: 可能會引起無謂的操作---->引起誤更新

    查看全部
    0 采集 收起 來源:觀察者優缺點

    2018-04-03

  • Observable類的notifyObservers()方法只支持拉的方式,而另一個重載方法notifyObservers(Object content)方法兩種方式(推的方式和拉的方式)都支持,所以在第二個時兩種都生效

    查看全部
  • Java實現與自己實現的對比:

    查看全部
  • 利用Java提供的觀察者模式:

    java.util.Observable類和java.util.Observer接口


    Java實現與自己實現的對比:

    查看全部
  • 觀察者模型的實現方式:

    一、推模型

    ? ? 目標對象主動向觀察者推送目標的詳細信息,推送的信息通常是目標對象的全部或部分數據


    二、拉模型

    ? ? 目標對象在通知觀察者的時候,只傳遞少量信息。

    ? ? 若觀察者需要更具體的信息,由觀察者主動到目標對象中獲取,相當于觀察者從目標對象中拉數據。

    ? ? 一般會把目標對象自身通過update方法傳遞到觀察者


    比較:

    1、推模型是假定目標對象知道觀察者需要的數據;拉模型不知道observer需要什么數據,因此把自身傳給observer,由觀察者來取值

    2、推模型使observer對象難以復用,拉模型傳遞的是目標對象本身,滿足各種需要


    查看全部
  • 認識觀察者模式:

    1、目標與觀察者之間的關系

    ? ?一對一、一對多、多對一(觀察者需要定義多個update方法用于區分)


    2、單項依賴

    ? ?觀察者依賴目標,觀察者一直在等待目標的通知


    3、命名建議

    ? ?觀察者模式又被稱為發布訂閱模式

    ? ?①目標接口的定義,名稱加Subject后綴

    ? ?②觀察者接口的定義,名稱加Observer后綴

    ? ?③觀察者接口的更新方法,名稱為update


    4、觸發通知的時機

    ? ?先修改狀態再通知,否則會導致狀態不一致


    5、觀察者模式的調用順序示意圖

    ? ?①準備階段

    創建目標對象-》創建觀察者對象-》向目標對象注冊觀察者對象

    ? ?②運行階段

    改變目標對象的狀態-》通知所有注冊的觀察者對象進行相應的處理-》回調目標對象,獲取相應的數據


    6、通知的順序

    ? ?多個觀察者之間是沒有先后順序的


    查看全部
  • 通用代碼:

    查看全部
  • 觀察者模式的設計圖

    查看全部

舉報

0/150
提交
取消
課程須知
學習本課程前,需要具備Java基礎,面向對象的程序設計思想。如果對這些知識不熟悉,可以學習《Java入門第一季》和《Java入門第二季》這兩門課程。
老師告訴你能學到什么?
1、理解觀察者模式的概念和結構 2、掌握如何將觀察者模式應用到項目中,解決項目實際問題 3、掌握觀察者模式的應用場景

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!