Feng.Li's Java See

          抓緊時間,大步向前。
          隨筆 - 95, 文章 - 4, 評論 - 58, 引用 - 0
          數(shù)據(jù)加載中……

          Java 觀察者模式

          網(wǎng)上商店中的商品在名稱、價格發(fā)生變化時,必須自動通知會員,Java的API為我們提供了Observer接口和Observable類來實(shí)現(xiàn)所謂觀察者模式。
            Observable(可觀察者)類允許在自身發(fā)生改變時,通知其它對象(實(shí)現(xiàn)接口Observer,觀察者)。
            下面是一個可觀察者(產(chǎn)品類):
          import java.util.*;
          public class product extends Observable{
             private String name;////產(chǎn)品名
             private float price;////價格

             public String getName(){ return name;}
             public void setName(String name){
              this.name=name;
             ////設(shè)置變化點(diǎn)
              setChanged();
              notifyObservers(name);////通知觀察者

             }   

             public float getPrice(){ return price;}
             public void setPrice(float price){
              this.price=price;
             ////設(shè)置變化點(diǎn)
              setChanged();
              notifyObservers(new Float(price));

             }

             ////以下可以是數(shù)據(jù)庫更新 插入命令.
             public void saveToDb(){
             System.out.println("saveToDb");
              }

          }

          下面是兩個觀察者:
          import java.util.*;
          public class NameObserver implements Observer{

             private String name=null;
             public void update(Observable obj,Object arg){
               if (arg instanceof String){
                name=(String)arg;
                ////產(chǎn)品名稱改變值在name中
                System.out.println("NameObserver :name changet to "+name);

               }

                }
             }

          import java.util.*;
          public class PriceObserver implements Observer{
             private float price=0;
             public void update(Observable obj,Object arg){
               if (arg instanceof Float){

                price=((Float)arg).floatValue();
            
                System.out.println("PriceObserver :price changet to "+price);

               }


             }

          }
          下面是測試類:
          public class Test {

             public static void main(String args[]){
              Product product=new Product();
              NameObserver nameobs=new NameObserver();
              PriceObserver priceobs=new PriceObserver();

              ////加入觀察者
              product.addObserver(nameobs);
              product.addObserver(priceobs);

              product.setName("applet");
              product.setPrice(9.22f);

             }
          }
          運(yùn)行結(jié)果:
          C:\java>java  Test
          NameObserver :name changet to applet
          PriceObserver :price changet to 9.22

          posted on 2007-05-09 17:07 小鋒 閱讀(777) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 襄汾县| 印江| 贵港市| 南召县| 乌拉特前旗| 苏尼特右旗| 望奎县| 芜湖市| 河池市| 冷水江市| 开平市| 洮南市| 车险| 乡城县| 塘沽区| 巴中市| 临江市| 靖西县| 抚宁县| 顺昌县| 呼和浩特市| 称多县| 丹阳市| 久治县| 娄烦县| 丽水市| 义马市| 称多县| 星座| 泗阳县| 玉林市| 乡城县| 平果县| 双流县| 麻江县| 永修县| 启东市| 沈阳市| 海城市| 南江县| 蕲春县|