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 小鋒 閱讀(781) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 满城县| 台湾省| 万载县| 固始县| 呼伦贝尔市| 池州市| 钦州市| 府谷县| 望城县| 石林| 罗江县| 潼关县| 南丰县| 建宁县| 会同县| 涿鹿县| 马公市| 高邑县| 裕民县| 柞水县| 鹤峰县| 泰和县| 肥西县| 禄劝| 隆回县| 图片| 湘西| 赣州市| 吴忠市| 石门县| 巴林左旗| 平利县| 林西县| 南岸区| 镇沅| 武乡县| 涟源市| 康马县| 柯坪县| 凤山市| 西青区|