首页 > 代码库 > 设计模式之观察者模式Observer

设计模式之观察者模式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


设计模式之观察者模式Observer