网上商店中的商品在名称、价格发生变化时,必须自动通知会员,Java的API为我们提供了Observer接口和Observable类来实现所谓观察者模式。
Observable(可观察者)类允许在自身发生改变时,通知其它对象(实现接口Observer,观察者)。
下面是一个可观察者(产品类):
package com.lizhenfa.observe;
import java.util.Observable;
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(price);
}
}
package com.lizhenfa.observe;
import java.util.Observable;
import java.util.Observer;
public class NameObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
//如果传入的参数是String 类型
if(arg instanceof String){
System.out.println("名字变了,你可以执行其他操作了");
}
}
}
package com.lizhenfa.observe;
import java.util.Observable;
import java.util.Observer;
public class PriceObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
//如果传入的参数是float类型
if(arg instanceof Float){
System.out.println("价格变化了,你可以执行其他操作了");
}
}
}
package com.lizhenfa.observe;
public class TestObserver {
/**
* @param args
*/
public static void main(String[] args) {
//创建一个商品对象(被观察的对象)
Product p = new Product();
//创建一个名字观察者,用来监视名称是否变化
NameObserver nameObserver = new NameObserver();
//创建一个价格观察者,用来监视价格是否发生变化
PriceObserver priceObserver = new PriceObserver();
//注册观察者
p.addObserver(nameObserver);
p.addObserver(priceObserver);
//测试名字发生变化
p.setName("李振发");
//测试价格发生变化
p.setPrice(100);
}
}
价格变化了,你可以执行其他操作了