java中提供了Observale类和Observer接口,使用它们就可以完成观察者模式。。
![]()
观察者模式就是:一个状态变化,所有观察这个状态的观察者都知道了。。
例如:房价,一旦房价变了,所有购房者(观察者)都知道了。。。
public interface Observer {
void update(Observable
o, Object arg);
}
这个接口中只有一个方法。。。就是update
class House extends Observable{
private float price ;
public House( float price)
{
this .price =
price;
}
public float getPrice()
{
return price;
}
public void setPrice( float price)
{
super.setChanged();//设置变化点
super .notifyObservers(price); //通知所有观察者价格变化
this.price = price;
}
@Override
public String toString() {
return "价格为" +this.price;
}
}
class HousePriceObserver implements Observer{
private String name;
public HousePriceObserver(String name) {
this.name = name;
}
public void update(Observable o, Object arg) {
if(arg instanceof Float){
System.out.print(this.name+"观察到价格的变化为:");
System.out.println(((Float)arg).floatValue());
}
}
}
public class ObservlableDemo {
public static void main(String[] args) {
House house= new House(1000000);
HousePriceObserver h= new HousePriceObserver("A" );
HousePriceObserver h1= new HousePriceObserver("B" );
HousePriceObserver h2= new HousePriceObserver("C" );
house.addObserver(h); //加入观察者
house.addObserver(h1);
house.addObserver(h2);
System. out .println(house);
house.setPrice(888888);
System. out .println(house);
}
}
结果:
价格为1000000.0
C观察到价格的变化为:888888.0
B观察到价格的变化为:888888.0
A观察到价格的变化为:888888.0
价格为888888.0
作者:likeaijiaqi 发表于2013-11-22 23:40:41 原文链接
阅读:53 评论:0 查看评论