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

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值