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

来源:互联网 发布:mac os x 10.11.3 编辑:程序博客网 时间:2024/05/16 18:14

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中使用的是堆栈}}
实现结果如下:



0 0