Observer观察者模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Observer观察者模式:
如果要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口。
import java.util.*;
class House extends 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){
=name;
}
public void update(Observable o,Object arg){
if(arg instanceof Float){
System.out.print(+"观察到价格更改为:");
System.out.println(((Float)arg).floatV alue());
}
}
};
public class ObserverDemo
{
public static void main(String args[]){
House h = new House(100000);
HousePriceObserver hpo1=new HousePriceObserver("购房者A");
HousePriceObserver hpo2=new HousePriceObserver("购房者B");
HousePriceObserver hpo3=new HousePriceObserver("购房者C");
h.addObserver(hpo1);
h.addObserver(hpo2);
h.addObserver(hpo3);
System.out.println(h); //输出房子的价格
h.setPrice(666666); //修改房子的价格
System.out.println(h); //输出房子的价格
}
}
在Observer接口中的update方法里面的两个参数:
●o: 表示Observerable类的对象
●arg: 需要被观察的内容
总结:
此模式是一种java本身的机制,不使用Observer和Observable也是可以实现的,只是比较复杂而已。