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 閱讀(832) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 博白县| 抚顺市| 广灵县| 莲花县| 辉县市| 苏尼特左旗| 云安县| 肥东县| 保山市| 濮阳市| 澄江县| 二手房| 济源市| 米脂县| 乌兰浩特市| 共和县| 城口县| 水城县| 井研县| 囊谦县| 泰州市| 博罗县| 龙江县| 镇安县| 德格县| 英山县| 新乡县| 云霄县| 阿图什市| 墨玉县| 南木林县| 衡山县| 龙口市| 镇赉县| 怀集县| 准格尔旗| 罗江县| 敦化市| 陇南市| 区。| 思茅市|