|
网上商店中的商品在名称、价格发生变化时,必须自动通知会员,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
C:\java>
下载源代码
|