<span style="font-size:14px;font-weight: normal;">/*
java 内置的一种观察者模式,多个观察者关注房价的变化,房价一变化多个观察者能感知到,学会查看API
*/
import java.util.*;
class House extends Observable{ //继承Observable表示一个被观察的对象
private float price; //房子价钱
public House(float price){
this.price=price;
}
public float getPrice(){
return this.price;
}
public void setPrice(float price){
//此处会改变房子的价格,要让观察者能看到,每一次更改都要让观察者发现。
super.setChanged(); //设置变化点
super.notifyObservers(price); //通知观察者价格改变
this.price=price;
}
public String toString(){
return "房子价格为:"+this.price;
}
}
class HousePriceObserver implements Observer{ //观察者,实现接口定义观察者
private String name;
public HousePriceObserver(String name){
this.name=name;
}
//overload
public void update(Observable o, Object arg){
if(arg instanceof Float){
System.out.print(this.name+"观察到价格变化为:");
System.out.println(((Float)arg).floatValue());
}
}
}
public class ObserverDemo01{
public static void main(String[] args){
House h = new House(1000000); //房子价格
HousePriceObserver hpo1 = new HousePriceObserver("观察者1");
HousePriceObserver hpo2 = new HousePriceObserver("观察者2");
HousePriceObserver hpo3 = new HousePriceObserver("观察者3");
//添加观察者
h.addObserver(hpo1);
h.addObserver(hpo2);
h.addObserver(hpo3);
System.out.println(h.toString()); //输出房子价格
h.setPrice(600000);
System.out.println(h);
}
}
</span>
使用本类中的方法this.xxx,使用父类中的方法super.xxx。学会查看API。
<span style="font-size:14px;font-weight: normal;">/*
java 内置的一种观察者模式,多个观察者关注房价的变化,房价一变化多个观察者能感知到,学会查看API
*/
import java.util.*;
class House extends Observable{ //继承Observable表示一个被观察的对象
private float price; //房子价钱
public House(float price){
this.price=price;
}
public float getPrice(){
return this.price;
}
public void setPrice(float price){
//此处会改变房子的价格,要让观察者能看到,每一次更改都要让观察者发现。
super.setChanged(); //设置变化点
super.notifyObservers(price); //通知观察者价格改变
this.price=price;
}
public String toString(){
return "房子价格为:"+this.price;
}
}
class HousePriceObserver implements Observer{ //观察者,实现接口定义观察者
private String name;
public HousePriceObserver(String name){
this.name=name;
}
//overload
public void update(Observable o, Object arg){
if(arg instanceof Float){
System.out.print(this.name+"观察到价格变化为:");
System.out.println(((Float)arg).floatValue());
}
}
}
public class ObserverDemo01{
public static void main(String[] args){
House h = new House(1000000); //房子价格
HousePriceObserver hpo1 = new HousePriceObserver("观察者1");
HousePriceObserver hpo2 = new HousePriceObserver("观察者2");
HousePriceObserver hpo3 = new HousePriceObserver("观察者3");
//添加观察者
h.addObserver(hpo1);
h.addObserver(hpo2);
h.addObserver(hpo3);
System.out.println(h.toString()); //输出房子价格
h.setPrice(600000);
System.out.println(h);
}
}
</span>