您的位置:首页 > 编程语言 > Java开发

Java学习笔记——利用接口和observer实现对象监视

2014-12-27 20:11 701 查看
Java中,又可以监视类变化的observer,一旦被监视类发生改变,可以立刻产生响应函数,具体实现如下:

JekyllAndHyde.java中

/*Observable的继承类,用于实现监视器的各项功能*/
import java.util.*;
public class JekyllAndHyde extends Observable {
public void drinkPotion(){
name="Mr.Hyde";
setChanged();//observer类中函数,标记要观察的对象发生改变
notifyObservers();//一旦观察的对象发生变化,这个函数边会通知各个观察器,同时利用clearObserver函数清除对象改变标记
}
public String getName(){//返回名字
return name;
}
private String name="Dr. Jekyll";
}
Person.java中

/*创建可以被监视的对象类,返回人员的名字和话语
* 接口是可以定义一系列的功能函数,在接口中可以并不具体定义,可以在类中具体实现
* */
import java.util.*;

public class Person implements Observer {
public Person(String name, String says) {
this.name = name;
this.says = says;
}
public void update(Observable thing,Object o){//实现Observer接口中必有的函数
System.out.println("It's "+((JekyllAndHyde)thing).getName()+"\n"+name+": "+says);
}
private String name;
private String says;
}
Horrific.java中

import java.util.*;

public class Horrific {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
JekyllAndHyde man = new JekyllAndHyde();

Observer[] crowd = {//创建监视器,person是实现observer的接口,可以类似于出自一个基类
new Person("Officer", "What's all this then?"),
new Person("Eileen Backwards",
"Oh, no, it's horrible-those teeth!"),
new Person("Phil McCavity",
"I'm your local dentist-here's my card."),
new Person("Slim Sagebrush",
"What in tarnation's goin' on there?"),
new Person("Freaky Weirdo",
"Real cool, man. Where can I get that stuff?") };
for(Observer observer:crowd){
man.addObserver(observer);//为类添加监视器,一个对象可以添加多个监视器
}
man.drinkPotion();//一旦有改变,setchange会传达给各个监视器,从而产生反应函数,从输出结果可以看出,addObserver中使用的是堆栈
}
}
实现结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: