欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java回调函数与观察者模式实例代码

程序员文章站 2023-10-20 12:09:56
本文研究的主要是java回调函数与观察者模式的实现,具体介绍和实现代码如下。 观察者模式(有时又被称为发布(publish )-订阅(subscribe)模式、模型-视图...

本文研究的主要是java回调函数与观察者模式的实现,具体介绍和实现代码如下。

观察者模式(有时又被称为发布(publish )-订阅(subscribe)模式、模型-视图(view)模式、源-收听者(listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

什么时候使用观察者模式:

  1. 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
  2. 当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
  3. 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

其实观察者模式同前面讲过的桥梁、策略有着共同的使用环境:将变化独立封装起来,以达到最大的重用和解耦。观察者与后两者不同的地方在于,观察者模式中的目标和观察者的变化不是独立的,而是有着某些联系。

在java中通过observable类和observer接口实现了观察者模式。一个observer对象监视着一个observable对象的变化,当observable对象发生变化时,observer得到通知,就可以进行相应的工作。

package com.demo.test;
import java.util.observable;
import java.util.observer;
//观察者模式里面目标类维护了所有观察者的引用,而回调里面只是维护了一个引用
public class observercallbackdemo {
	// 观察者a
	static class concreteobservera implements observer {
		@override
		    public void update(observable o, object arg) {
			system.out.println("concreteobservera update");
		}
	}
	// 观察者b
	static class concreteobserverb implements observer {
		@override
		    public void update(observable o, object arg) {
			system.out.println("concreteobserverb update");
		}
	}
	// 被观察对象
	static class concreteobservable extends observable {
		public void changevalue() {
			//protected方法只能在子类被调用
			setchanged();
			notifyobservers();
		}
	}
	// 回调函数接口
	interface icallback {
		public void oncall();
	}
	// 回调类
	static class callbackdemo {
		private icallback callback;
		public void setlistener(icallback callback) {
			this.callback = callback;
		}
		public void call() {
			callback.oncall();
		}
	}
	public static void main(string[] args) {
		// 观察者
		concreteobservera observera = new concreteobservera();
		concreteobserverb observerb = new concreteobserverb();
		concreteobservable observable = new concreteobservable();
		observable.addobserver(observera);
		observable.addobserver(observerb);
		system.out.println("countobservers = " + observable.countobservers());
		observable.changevalue();
		// 回调函数
		callbackdemo callbackdemo = new callbackdemo();
		callbackdemo.setlistener(new icallback() {
			@override
			      public void oncall() {
				system.out.println("callback oncall");
			}
		}
		);
		callbackdemo.call();
	}
}

输出结果:

countobservers = 2
concreteobserverb update
concreteobservera update
callback oncall

总结

从上面代码可以看出:回调函数应该属于观察者模式的一种,目的是为了替代轮循机制,将组件之间的耦合性降低。观察者模式里面目标类维护了所有观察者的引用,而回调里面只是维护了一个引用。

以上就是本文关于java回调函数与观察者模式实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!