java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java观察者模式

Java设计模式之观察者模式observer pattern详解

作者:制造bug的键盘钢琴师

这篇文章主要介绍了Java设计模式之观察者模式observer pattern详解,当一个对象发生数据变化时,通知其他相关的一系列对象,接受到通知的对象根据该对象的变化进行相应处理以响应变化的过程,需要的朋友可以参考下

观察者模式

简介:

当一个对象发生数据变化时,通知其他相关的一系列对象,接受到通知的对象根据该对象的变化进行相应处理以响应变化的过程。

概念解析:

其实与ActiveMQ、RabbitMQ等中间件的基本运行模式相类似,观察者模式的基础构建方式非常相近,其分为观察者与被观察者两个部分。

(一)观察者:从字面上看也就是指进行观察的对象,对应来说也就是消息订阅者;

(二)被观察者:当然被观察者也就是指被观察的对象,相应的角色也就是消息发布者。

运行方式:

推:消息以类似广播的形式通知观察者,观察者只能被动、无条件接受;

拉:接收到被观察者的通知,可以自主决定获取消息。

观察者模式的实现

两种方式实现观察者设计模式的实现,具体如下:

【1】手写观察者设计模式

【2】Java API 提供的观察者设计模式 使用 Java API 提供的 Observer 和 Observeable 实现观察者模式

手写观察者设计模式

编写被观察对象:subject.java

在这里插入图片描述

编写观察者接口,起到统一规范作用.

在这里插入图片描述

实现Observer接口,我们可以有一个或多个观察者对一个subject进行观察

在这里插入图片描述

编写主类,进行运行展示

在这里插入图片描述

运行接口展示:

在这里插入图片描述

通过API实现观察者模式

通过继承Observable父类,构建一个被观察者

在这里插入图片描述

实现Observer创建一个观察者类

在这里插入图片描述

通过编写主类测试类观察结果:

在这里插入图片描述

观察者模式的优缺点

优点:观察者与被观察者抽象耦合,可定义一种稳定的消息触发机制。 缺点:如果被观察者有多个间接的观察者,消息的传递将消耗更多时间,如果观察者与被观察者之间循环依赖,最终会导致系统崩溃。也正因如此与队列消息相类似,我们一般会单独开一个线程让其进行运行,以避免程序堵塞,不能运行的尴尬。

使用场景:

一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。 一个对象必须通知其他对象,而并不知道这些对象是谁。 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。

注意事项:

1、JAVA 中已经有了对观察者模式的支持类。

2、避免循环引用。

3、如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。

到此这篇关于Java设计模式之观察者模式observer pattern详解的文章就介绍到这了,更多相关Java观察者模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文