設計模式之觀察者模式Observer

Java中的API還提供現成的Observer接口java.util.Observer

和類java.util.Observable------------大家可以看一下api和源碼


下面提供案例

package shejimoshi.observer;
import java.util.Observable;
/**
 * 類描述:Product 繼承自Observable (被觀察)
 * @author 王要傑
 * @version 1.0.8.1
 * 創建時間 2014-2-24
 */
public class Product extends Observable {
  private float price = 50.0f;
  private String name = "";
  public Product(String name) {
    this.setName(name);
  }
  public Product() {
  }
  public void setPrice(float price) {
    this.price = price;
    this.setChanged();//設定標誌true
    this.notifyObservers(this.price);//通知觀察者
  }
  public float getPrice() {
    return price;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
}
----------------------------------
package shejimoshi.observer;
import java.util.Observable;
import java.util.Observer;
/**
 * 類描述:觀察者實現Observer 接口中的update方法
 * @author 王要傑
 * @version 1.0.8.1
 * 創建時間 2014-2-24
 */
public class MyObserver implements Observer {
  public void update(Observable o, Object arg) {
    // TODO Auto-generated method stub
    Observable product = (Product) o;
    float price = (Float) arg;
    System.out.println(((Product) product).getName() + "修改價格爲" + price);
  }
}
--------------------------------
package shejimoshi.observer;
/**
 * 類描述:
 * @author 王要傑
 * @version 1.0.8.1
 * 創建時間 2014-2-24
 */
public class Test {
  /**
   * 方法描述:@cursor
   *
   * @param args
   * @param 關鍵字 
   * @author 王要傑
   * @date 創建時間 2014-2-24
   * @since V1.0.8.1
  */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Product p1 = new Product("Spring in Action");
    Product p2 = new Product("Hibernate");
    MyObserver observer = new MyObserver();
    p1.addObserver(observer);//註冊觀察者
    p2.addObserver(observer);//註冊觀察者
    p1.setPrice(35);
    p2.setPrice(22);
  }
}

-------------

輸出結果

Spring in Action修改價格爲35.0

Hibernate修改價格爲22.0


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章