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

网友投稿 423 2023-02-20


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

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

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

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

当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。

当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

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

在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

shttp://tatic 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

总结

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring启动后获取所有拥有特定注解的Bean实例代码
下一篇:微信接口开发教程(web微信api接口开发)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~