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

作者:司马懿字仲达 时间:2023-11-16 17:30:11 

本文研究的主要是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

总结

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

来源:http://blog.csdn.net/chy555chy/article/details/52777989

标签:java,回调函数,观察者模式
0
投稿

猜你喜欢

  • c++指针使用形参改变实参的方法

    2023-03-11 22:40:21
  • C#中的const和readonly关键字详解

    2023-02-21 17:44:22
  • Android ListView组件详解及示例代码

    2022-04-27 07:12:08
  • springboot整合Quartz实现动态配置定时任务的方法

    2023-03-08 22:13:10
  • Android控件View打造完美的自定义侧滑菜单

    2021-06-16 07:44:00
  • Java数据结构之AC自动机算法的实现

    2023-08-31 07:23:57
  • 浅谈Java HttpURLConnection请求方式

    2021-06-24 12:34:49
  • JavaSE static final及abstract修饰符实例解析

    2021-07-01 10:54:54
  • Jmeter对接口测试入参实现MD5加密

    2023-08-19 08:59:05
  • java Quartz定时器任务与Spring task定时的几种实现方法

    2021-11-14 22:31:47
  • Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案

    2023-10-16 14:56:01
  • SpringCloud Feign远程调用实现详解

    2021-09-28 11:35:15
  • java编程中字节流转换成字符流的实现方法

    2021-06-09 15:59:04
  • Java日常练习题,每天进步一点点(40)

    2022-12-20 14:39:53
  • Android Studio 在项目中引用第三方jar包的方法

    2023-07-18 22:05:49
  • spring+html5实现安全传输随机数字密码键盘

    2023-04-05 13:46:39
  • java模拟实现双向链表

    2022-06-05 09:16:16
  • SpringBoot全局异常与数据校验的方法

    2023-12-11 10:46:06
  • Android Mms之:短信发送流程(图文详解)

    2022-07-27 02:10:21
  • Java VisualVM监控远程JVM(详解)

    2022-07-10 15:59:15
  • asp之家 软件编程 m.aspxhome.com