posts - 297,  comments - 1618,  trackbacks - 0
               觀察者模式(Observer) 屬于對(duì)象的行為模式
          1. 定義
               定義對(duì)象間的一種一對(duì)多的關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴它的對(duì)象都得到通知,并被自動(dòng)更新。
          2. 使用的原因
                
          在應(yīng)用程序開發(fā)過程中,往往都要求用戶界面和業(yè)務(wù)邏輯分離,劃定清晰的界限.因?yàn)閼?yīng)用程序要求能快速的更改用戶界面并且不能對(duì)應(yīng)用程序其他部分產(chǎn)生連帶影響,而且業(yè)務(wù)邏輯也會(huì)發(fā)生變化并要求這一切變化與用戶界面無關(guān).觀察者(observer)就是解決此問題最常用的設(shè)計(jì)模式,它非常有助于在系統(tǒng)中各個(gè)對(duì)象之間劃分清晰的界限。
               觀察者模式在界面設(shè)計(jì)中應(yīng)用廣泛。
               還有一種常見的情況,一個(gè)軟件系統(tǒng)常常要求在某一個(gè)對(duì)象發(fā)生變化的時(shí)候,某些其它的對(duì)象做出相應(yīng)的改變,而觀察者模式是解決這個(gè)問題的一個(gè)低耦合度的設(shè)計(jì)方案,它能夠減少對(duì)象之間的耦合以便更加利于系統(tǒng)的復(fù)用。
          3. 適用的情況舉例
              eg1.  
          4. 類圖結(jié)構(gòu)及說明
            1)示意性類圖如下所示:
            
            2)類說明
               i)抽象主題Subject:用于將所有的對(duì)象引用保存在一個(gè)聚集中(比如Vector對(duì)象)里,每個(gè)Subject可以有任何數(shù)量的觀察者。它又被叫做抽象觀察者(Observable)角色,一般使用抽象類或接口實(shí)現(xiàn)。
               ii)抽象觀察者Observer:為所有的具體觀察者定義一個(gè)接口,在得到Subject的通知時(shí)更新自己。
               iii)具體主題ConcreteSubject:將有關(guān)狀態(tài)存入具體觀察者對(duì)象。在具體主題的內(nèi)部狀態(tài)改變時(shí),給所有登記過的觀察者發(fā)出通知。又被稱為具體被觀察者角色。
               iv)具體觀察者ConcreteObserver:實(shí)現(xiàn)了抽象觀察者Observer,在被觀察者發(fā)出通知時(shí),將自行執(zhí)行update方法更新。

          5. 使用舉例
                待續(xù)。
          6. 參考文章
              1)《Pattens In Java》
              2)《Java與模式》
              3)http://i.cn.yahoo.com/whj1234586/blog/p_34/
              4)http://www.999qc.cn/Article/NET/15500/
          posted on 2008-05-14 07:56 阿蜜果 閱讀(4847) 評(píng)論(4)  編輯  收藏 所屬分類: Design Pattern


          FeedBack:
          # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--觀察者模式(Observer) (未完待續(xù))
          2008-05-14 13:53 | 迷失的風(fēng)
          這個(gè)方法我見過,是在jzkit工具包里面有,像這個(gè)
          Observer fragment_count_observer = new Observer() {
          public void update(Observable o, Object arg) {
          IREvent e = (IREvent) arg;

          if (e.event_type == IREvent.SOURCE_RESET) {
          System.err
          .println("TIME: Sub Fragment source reset");
          } else if (e.event_type == IREvent.FRAGMENT_COUNT_CHANGE) {
          System.err
          .println("TIME: Number of fragments has changed to "
          + e.event_info);

          }
          }
          };

          看的不是太明白,用起來迷糊。  回復(fù)  更多評(píng)論
            
          # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--觀察者模式(Observer) (未完待續(xù))
          2008-05-16 15:22 | 網(wǎng)上買書
          的確觀察者模式在界面設(shè)計(jì)中應(yīng)用廣泛。  回復(fù)  更多評(píng)論
            
          # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--觀察者模式(Observer) (未完待續(xù))[未登錄]
          2008-11-26 19:40 | Lanny
          最近我也在學(xué)習(xí)Observer模式,不過仍未在實(shí)際項(xiàng)目應(yīng)用上:)  回復(fù)  更多評(píng)論
            
          # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--觀察者模式(Observer) (未完待續(xù))[未登錄]
          2009-09-21 19:43 | 隨意
          這樣子說那使用delegate是不是一種簡(jiǎn)單的觀察者模式呢?  回復(fù)  更多評(píng)論
            
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

                生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊(cè)

          關(guān)注blog

          積分與排名

          • 積分 - 2299173
          • 排名 - 3

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 临武县| 邳州市| 丰镇市| 高淳县| 博野县| 望江县| 黄平县| 阳高县| 沾化县| 确山县| 星子县| 嘉禾县| 莱州市| 城固县| 会东县| 光山县| 丰县| 昌乐县| 石楼县| 金塔县| 株洲市| 巴彦淖尔市| 竹溪县| 抚顺市| 旺苍县| 榆树市| 镇康县| 胶南市| 纳雍县| 临安市| 砚山县| 静安区| 临颍县| 乌苏市| 金坛市| 沁阳市| 利川市| 惠来县| 宁远县| 隆安县| 洪湖市|