天天看点

【设计模式】-监听者模式和观察者模式的区别与联系1.介绍2.相同之处3.不同之处4.使用场景

前言:监听者模式和观察者模式在平时开发中或在Spring源码中经常有碰到,两者乍看上去好像差不多,但为何会分为两种不同的设计模式?究竟是人性的扭曲还是道德的沦丧?让我们一起走进本篇,深入解析两者的异同和使用场景。

目录

1.介绍

1.1监听者模式介绍

1.2观察者模式介绍

2.相同之处

3.不同之处

4.使用场景

1.介绍

1.1监听者模式介绍

当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.

https://blog.csdn.net/lovexiaotaozi/article/details/102579880

1.2观察者模式介绍

在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新.

详情请参阅这篇:【设计模式】-09观察者模式

https://blog.csdn.net/lovexiaotaozi/article/details/85161368

延伸阅读:关于观察者模式和订阅者模式的区别,知乎这篇总结的挺好->https://zhuanlan.zhihu.com/p/51357583

2.相同之处

监听者模式和观察者模式都可以实现在某件事情状态发生改变时,触发后续要做的事情,在功能和实现上都比较类似,且都做到了低耦合,低依赖,让代码优雅.

3.不同之处

对于不同之处,我们先来看一下监听者模式和观察者模式的类图:

监听者模式:

【设计模式】-监听者模式和观察者模式的区别与联系1.介绍2.相同之处3.不同之处4.使用场景

观察者模式:

【设计模式】-监听者模式和观察者模式的区别与联系1.介绍2.相同之处3.不同之处4.使用场景

监听者模式中的事件源对应观察者模式中的被观察者,监听者中的监听器对应观察者模式中的观察者实现类,除此之外监听者模式比观察者模式多出个事件对象,事件对象正是两种设计模式不同的根源,我在监听者模式那篇中也有介绍,监听者模式通过引入事件对象,充当事件的载体,可以更灵活的实现不同的事件触发不同的监听器,执行不同的逻辑.相比观察者模式,监听者模式的适用场景更广,但实现起来比观察者模式略复杂一点.

4.使用场景

观察者模式适用于类似发布和订阅这种场景,当有发布内容时,将发布内容推送给订阅者即可,无需区分事件类型,区别对待.

监听者模式适用于事件类型超过1种且需要区别对待的场景,比如监听老板的指令,老板的指令可能有多种,老板下发指令要程序猿加班,程序猿就得加班,老板下发指令要程序猿交付,程序猿就得交付...

以上便是我对监听者模式和观察者模式的一点理解,如有遗漏或不正之处感谢留言斧正!

继续阅读