Feng.Li's Java See

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

          Java 觀察者模式

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

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

             }   

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

             }

             ////以下可以是數據庫更新 插入命令.
             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;
                ////產品名稱改變值在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);

             }
          }
          運行結果:
          C:\java>java  Test
          NameObserver :name changet to applet
          PriceObserver :price changet to 9.22

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


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


          網站導航:
           
          主站蜘蛛池模板: 定兴县| 丁青县| 海城市| 滦平县| 大关县| 巴彦淖尔市| 枝江市| 岳普湖县| 德惠市| 桦川县| 新巴尔虎右旗| 西畴县| 天峨县| 阿拉善右旗| 乌兰浩特市| 巍山| 荥经县| 浏阳市| 土默特左旗| 安新县| 巴南区| 武平县| 汉中市| 逊克县| 罗定市| 辛集市| 濮阳县| 乌苏市| 沅陵县| 体育| 邵阳市| 巴青县| 裕民县| 河西区| 家居| 甘德县| 尼勒克县| 云林县| 牟定县| 那坡县| 高州市|