Java for memory

          memory is forever

          常用鏈接

          統計

          最新評論

          程序設計模式之----Observer模式

          Observer模式也稱為觀察者模式,

          觀察者模式是java已經實現的模式,我們只要利用java.util.Obserable類和java.util.Observer接口就可以實現觀察者模式

          實現過程:

          被觀察者必須繼承Observable,一旦事件被觸發,調用notifyObservers通知觀察者

          觀察者必須實現Observer接口,實現update方法,完成事件處理

          舉個經典的例子....貓叫,老鼠跑.人驚醒....

          代碼:

           1package javamodel.observer;
           2
           3import java.util.Observable;
           4import java.util.Observer;
           5
           6/**
           7* 貓叫,老鼠跑,主人被驚醒,用代碼實現這個連鎖反應 。
           8@author Administrator
           9*
          10*/

          11
          12public class TestObserver {
          13
          14public static void main(String[] args){
          15   Cat c=new Cat();
          16   Observer o1=new Mouse();
          17   Observer o2=new Man();
          18   c.addObserver(o1);
          19   Mouse oo1=(Mouse)o1;//向下轉型
          20   oo1.addObserver(o2);
          21   c.CatSay();
          22}

          23
          24}

          25
          26class Cat extends Observable{//貓被老鼠觀察,貓是被觀察者
          27
          28public void CatSay(){
          29   System.out.println("貓叫了");
          30   this.setChanged();
          31   this.notifyObservers();
          32}

          33}

          34
          35class Mouse extends Observable implements Observer{//老鼠觀察貓,貓是觀察者,對于人,老鼠是被觀察者
          36
          37public void update(Observable arg0, Object arg1) {
          38   // TODO Auto-generated method stub
          39   System.out.println("貓叫了,老鼠跑了");
          40   this.setChanged();
          41   this.notifyObservers();
          42}

          43
          44}

          45
          46class Man implements Observer{//人觀察老鼠,人是觀察者
          47
          48public void update(Observable arg0, Object arg1) {
          49   // TODO Auto-generated method stub
          50   System.out.println("老鼠跑了,人驚醒了");
          51}

          52}

          53
          54


          總結, 觀察者模式的應用場景:

          1、 對一個對象狀態的更新,需要其他對象同步更新,而且其他對象的數量動態可變。

          2、 對象僅需要將自己的更新通知給其他對象而不需要知道其他對象的細節。

          觀察者模式的優點:

          1、 SubjectObserver之間是松偶合的,分別可以各自獨立改變。

          2、 Subject在發送廣播通知的時候,無須指定具體的ObserverObserver可以自己決定是否要訂閱Subject的通知。

          3、 遵守大部分GRASP原則和常用設計原則,高內聚、低偶合。

          觀察者模式的缺陷:

          1、 松偶合導致代碼關系不明顯,有時可能難以理解。(廢話)

          2、 如果一個Subject被大量Observer訂閱的話,在廣播通知的時候可能會有效率問題。(畢竟只是簡單的遍歷)


          posted on 2008-11-25 11:02 Lanny 閱讀(828) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 长阳| 方城县| 大渡口区| 铜鼓县| 安仁县| 抚松县| 临泽县| 突泉县| 长葛市| 富顺县| 龙胜| 来安县| 海南省| 绥江县| 元氏县| 临武县| 江山市| 株洲县| 枣阳市| 桃江县| 宣城市| 晋州市| 镇原县| 神农架林区| 武平县| 客服| 洞口县| 新干县| 扎囊县| 怀宁县| 会理县| 方山县| 南岸区| 房产| 珲春市| 临湘市| 双流县| 通海县| 克什克腾旗| 稻城县| 简阳市|