美文网首页程序员
观察者模式与回调函数

观察者模式与回调函数

作者: 老呼 | 来源:发表于2017-05-15 10:52 被阅读423次

在形式上讲,观察者模式与回调模式有很大的相似之处,对两者使用都不是很熟练的同学,可能会难以分辨。

观察者模式

观察者模式的简单代码实现如下:


public class ConcretSubject {
   private List<Observer> observers = new ArrayList<>();

   public void register(Observer observer) {
       observers.add(observer);
   }


   public void call() {
       for (Observer observer : observers) {
           observer.oncall();
       }
   }
}


public interface Observer {
   void oncall();
}

public class Main {
   public static void main(String[] args) {
       ConcretSubject subject = new ConcretSubject();
       Observer observer = () -> System.out.println("observer");
       subject.register(observer);
       subject.call();
   }
}

我们首先声明一个被观察对象。

然后建立多个观察者。

将多个观察者都注册到被观察者里面。一个被观察者维护者一个观察者列表。

当被观察者数据更新时,将会遍历这个列表中所有的观察者,一次调用观察者的观察方法。

由此可见,在观察者模式里面,我们的中心人物是被观察者,被观察者负责维护观察者列表,被观察者负责一一通知观察者。

回调模式

回调函数的简单代码实现如下:


public class ConcretSubject {
   private Callback callback;

   public void register(Callback callback) {
       this.callback = callback;
   }

   public void call() {
       callback.onCall();
   }
}


public interface Callback {
   void onCall();
}

public class Main {

   public static void main(String[] args) {
       ConcretSubject subject = new ConcretSubject();
       Callback callback = new Callback() {
           @Override
           public void onCall() {
               System.out.println("call");
           }
       };
       subject.register(callback);
       subject.call();
   }
}

通过对比,我们发现,观察者模式和回调函数模式及其相似,差别仅在于在观察者模式中,被观察者维护这一个观察者列表,而在回调模式中,“被观察者”只是保存了一个“观察者”。这就是形式上的终极区别。

也就是说,回调函数是一种特殊的观察者模式,是一种一对一的观察者模式。

相关文章

  • node 事件循环

    概念 -单线程、单进程,结合V8的异步回调接口,处理大量并发-API支持回调函数-事件机制采用设计模式中观察者模式...

  • 观察者模式与回调函数

    在形式上讲,观察者模式与回调模式有很大的相似之处,对两者使用都不是很熟练的同学,可能会难以分辨。 观察者模式 观察...

  • JS之异步编程方法

    异步方法有:回调函数、事件监听、发布订阅(观察者模式)、Promise对象、Generator、Async/Awa...

  • 编程模式·观察者模式、事件通知、消息队列三者区别

    观察者模式、事件通知、消息队列三者有类似,都有回调函数注册,通知调用的设计,容易混淆。 简述和区别 观察者模式:被...

  • 如何实现异步编程,有哪些方式?

    1.回调函数 2.事件监听 3.Promises对象 4.发布/订阅(观察者模式)

  • JavaScript 模式(四)

    函数模式 1.回调模式 【基本模式】 回调模式下,回调函数作为参数可以是一个已有的函数,也可以是匿名函数 【作用域...

  • 观察者模式

    背景 在许多公共工具中我们可能听说过一个函数叫回调函数,回调函数就是被传入然后再调用的函数,观察者模式传入一个观察...

  • JS的四种异步模式:回调、事件、观察者、promise

    参考文章:前端基本知识(四):JS的异步模式:1、回调函数;2、事件监听;3、观察者模式;4、promise对象J...

  • Rxjs学习之观察者(Observer)与可观察对象(Obser

    什么是观察者? 观察者是有Observable(可观察对象)发送值的消费者 观察者只是一组回调函数的集合,每个回调...

  • 回调与观察者模式

    观察者模式 观察者模式是为了满足监听的需求。也就是说当某件事情发生的时候, 一个或多个观察者需要获知此事件的发生,...

网友评论

    本文标题:观察者模式与回调函数

    本文链接:https://www.haomeiwen.com/subject/spzcxxtx.html