Observable(可观察的)类可以把对象的变化传递给其他的对象(观察者对象)(一个或多个)要实现对象(被观察者)变化时通知另个对象(观察者)它已经发生变化的功能,被观察者类要继承Observable类,观察者类要实现Observer接口下面以老鼠作为被观察者,猫作为观察者举例来说明具体实现方法:
被观察者类: (Rat.java)import java.util.Observable;
//被观察者类要继承Observable类
public class Rat extends Observable
{
String status="老鼠在洞中.";
public void change()
{
status="老鼠到了洞外!";
setChanged(); //把当前对象设置为发生了变化的
notifyObservers();//调用观察对象的update()
}
public void showStatus()
{
System.out.println(status);
}
}
观察者类: (Cat.java)import java.util.Observer;
import java.util.Observable;//观察者需要实现接口Observer
public class Cat implements Observer
{
String think;
public Cat()
{
think="老鼠为什么呆在洞里不出来?";
}
//接口需要实现的唯一方法,当被观察对象有变化时自动调用
public void update(Observable obv,Object o)
{
((Rat)obv).showStatus();
think="看起来这只老鼠美味十足啊!";
showStatus();
}
public static void main(String[] args)
{
Rat rat=new Rat();
rat.showStatus();
Cat cat=new Cat();
cat.showStatus();
rat.addObserver(cat);//注册观察者
rat.change();//被观察对象变化
}
public void showStatus()
{
System.out.println("The cat think: "+think);
}
}先编译Rat.java成功后再编译执行Cat.java,可以看到被观察对象rat.change()后,cat.update()自动激发执行
被观察者类: (Rat.java)import java.util.Observable;
//被观察者类要继承Observable类
public class Rat extends Observable
{
String status="老鼠在洞中.";
public void change()
{
status="老鼠到了洞外!";
setChanged(); //把当前对象设置为发生了变化的
notifyObservers();//调用观察对象的update()
}
public void showStatus()
{
System.out.println(status);
}
}
观察者类: (Cat.java)import java.util.Observer;
import java.util.Observable;//观察者需要实现接口Observer
public class Cat implements Observer
{
String think;
public Cat()
{
think="老鼠为什么呆在洞里不出来?";
}
//接口需要实现的唯一方法,当被观察对象有变化时自动调用
public void update(Observable obv,Object o)
{
((Rat)obv).showStatus();
think="看起来这只老鼠美味十足啊!";
showStatus();
}
public static void main(String[] args)
{
Rat rat=new Rat();
rat.showStatus();
Cat cat=new Cat();
cat.showStatus();
rat.addObserver(cat);//注册观察者
rat.change();//被观察对象变化
}
public void showStatus()
{
System.out.println("The cat think: "+think);
}
}先编译Rat.java成功后再编译执行Cat.java,可以看到被观察对象rat.change()后,cat.update()自动激发执行
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货