您当前的位置: 首页 >  Java

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

基于Java原生代码 的 观察者模式 示例

梁云亮 发布时间:2021-08-29 20:18:03 ,浏览量:1

原理

因为观察者模式使用非常频繁,Java其实已经提供了观察者模式的实现。在java.util包中有如下两个类型(在JDK11中已经去除):

  • java.util.Observer:观察对象,就是我们上面的Observer。Observ接口提供了如下常用的方法:
  • void update(Observable o, Object arg) 只要observable 对象发生了改变,就会调用此方法。

java.util.Observable:可被观察对象,即我们的Subject。Observable接口提供了如下常用的方法:

  • void addObserver(Observer o) 如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。
  • protected void clearChanged() 指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以 hasChanged 方法将返回 false。
  • int countObservers() 返回 Observable 对象的观察者数目。
  • void deleteObserver(Observer o) 从对象的观察者集合中删除某个观察者。
  • void deleteObservers() 清除观察者列表,使此对象不再有任何观察者。
  • boolean hasChanged() 测试对象是否改变。
  • void notifyObservers() 如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。
  • void notifyObservers(Object arg) 如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。
  • protected void setChanged() 标记此 Observable 对象为已改变的对象,调用该方法后 hasChanged 方法将返回 true。
示例

老师在答疑时间,原来是不停地在下面走动,发现学生有问题,然后问学生。现在利用观察者模式,当答疑时间到了的话,告诉学生可以问问题了,然后老师就可以坐下来休息,等有问题的学生来问问题了。

  • 学生类:
public class Stu1 implements Observer{
@Override
public void update(Observable o, Object arg) {
		System.out.println("stu1");
}
}
public class Stu2 implements Observer{
	@Override
	public void update(Observable o, Object arg) {
			System.out.println("stu2");
	}
}
  • 老师类:
public class Teacher extends Observable {
	public static void main(String[] args) {	
		Stu1 stu1   = new Stu1();
		Stu2 stu2   = new Stu2();
		Teacher teacher = new Teacher();
		
		teacher.addObserver(stu1);
		teacher.addObserver(stu2);
		
		teacher.setChanged();//答疑时间到
		teacher.notifyObservers();//通知学生,下面老师就可以坐下来等学生来问问题了
	}
}

运行程序,结果如下图所示: 在这里插入图片描述

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0516s