<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    細心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

    BlogJava 聯系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
    假設今天您設計一個試算表程式,當中有一個資料物件,您可以用表格圖形物件、柱狀圖形物件、圓餅圖形物件等方式來呈現物件,無論您是用哪種圖形物件,重點是若資料物件的內容作了更改,則圖形物件的內容也必須跟著修改,或許您的程式中有兩個以上的圖形物件來呈現資料,您在圖形物件上更動資料,則另一個圖形物件也必須作出相對應的變化。
    主題 資料物件
    觀察者 柱狀圖形 表格圖形 圓餅圖形


    又假設您今天設計一個網路遊戲,您在伺服器上維護一個連線客戶端共享的資料物件,當其中一個客戶端作了操作,將對此資料物件作修改,則伺服器必須通知其它客戶端作相對應的變化(像是人物位置走動、建了一個城堡等)。
    主題 資料物件
    觀察者 客戶端一 客戶端二 客戶端三


    在Observer模式中的主角為主題(subject)與觀察者(observer),觀察者訂閱它感興趣的主題,一個主題可以被多個觀察者訂閱,當主題的狀態發生變化時,它必須通知(notify)所有訂閱它的觀察者,觀察者檢視主題的狀態變化,並作出對應的動作,所以Observer 模式也稱之為Publish-Subscribe模式。

    Observer模式的 UML 圖如下所示:
    Observer

    Subject類中有一個notify()方法,通常是在Subject的狀態發生改變時呼叫它,notify()中會呼叫 Observer的update()方法,通常會先取得Subject的新狀態,然後更新Observer的顯示或行為,這個過程我們可以透過 Sequence Diagram來表達:
    Observer

    在Java中支援觀察者模式,要成為觀察者的類必須實作Observer介面,這個介面中定義了一個update()方法,這個方法會被主題物件在通知狀態變化時呼叫,您必須在這個方法中實作您所想要的對應行為。

    主題物件會是Observable的子類,在這邊注意兩個重要的方法:setChanged()與notifyObserver()。 setChanged()是用來設定主題物件的狀態已經被改變,而notifyObserver()方法會通知所要訂閱主題物件的觀察者,調用其 update()方法。

    有興趣的話,建議看一下Java的Observable.java中是如何實作的,這有助於瞭解Observer模式的運作方式。
    posted on 2007-04-17 10:50 張金鵬 閱讀(267) 評論(0)  編輯  收藏 所屬分類: Behavioral 模式
    主站蜘蛛池模板: 亚洲AV无码成人精品区狼人影院| 免费激情网站国产高清第一页| 成年女人午夜毛片免费看| 精品国产日韩亚洲一区在线| 久久精品国产亚洲Aⅴ香蕉| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 人与动性xxxxx免费| 亚洲精品国产手机| 日本免费人成视频播放| 最新国产乱人伦偷精品免费网站| 亚洲人成在久久综合网站| 亚洲毛片不卡av在线播放一区| 5555在线播放免费播放| 一级做受视频免费是看美女| 91午夜精品亚洲一区二区三区| 亚洲AV中文无码乱人伦在线视色 | 91在线视频免费看| 国产成人精品免费视频大全| 亚洲黄色激情视频| 狠狠色伊人亚洲综合成人| 白白国产永久免费视频| **aaaaa毛片免费同男同女| 一级毛片在播放免费| 亚洲性色精品一区二区在线| 亚洲成色在线影院| 亚洲国产香蕉人人爽成AV片久久| 亚洲一区免费在线观看| 国产中文字幕在线免费观看| 国产精品国产亚洲区艳妇糸列短篇| 久久国产亚洲高清观看| 国产亚洲精品国看不卡| 免费一级毛片在线播放不收费| 国内精品乱码卡1卡2卡3免费| 国产成人AV片无码免费| free哆拍拍免费永久视频| 色窝窝亚洲av网| 亚洲AV成人无码天堂| 亚洲欧洲国产视频| 亚洲AV乱码一区二区三区林ゆな| 国产精品亚洲产品一区二区三区| 国产精品冒白浆免费视频|