全部博文(19)
分类: Java
2011-11-08 14:28:23
package com;
import java.util.Observable;
public class Product extends Observable{
private float price;
SMSSendObserver so ;
// EmailSendObserver eo;
public Product(float price) {
super();
this.price = price;
so = new SMSSendObserver();
// eo = new EmailSendObserver();
this.addObserver(so);
// this.addObserver(eo);
}
public void changePrice(float price)
{
if(this.price!=price)
{
this.price = price;
setChanged();
}
notifyObservers();
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
3.Observer类
package com;
import java.util.Observable;
import java.util.Observer;
public class SMSSendObserver implements Observer{
// public SMSSendObserver(Product prt) {
// super();
// prt.addObserver(this);
// // TODO Auto-generated constructor stub
// }
@Override
public void update(Observable product, Object arg) {
// TODO Auto-generated method stub\
System.out.println("SMSSendObserver得到的价格是"+((Product)product).getPrice()+"");
((Product)product).changePrice(300);
}
}
4.总结
(1)被调对象继承Observable类,为观察客体,主调对象实现Observer,为观察主体。观察客体里面声明观察主体,一旦观察客体成员变化,则通知观察主题做相应的改变。通过Observable来循环通知(setchanged(),notifyObservers()),Observer只是调用相应的改变方法update。
(2)应用在变化需要通知其他的引用对象修改的场景。