目录
- 观察者模式
- 观察者模式的实现
- 手写观察者设计模式
- 通过API实现观察者模式
观察者模式
简介:
当一个对象发生数据变化时,通知其他相关的一系列对象,接受到通知的对象根据该对象的变化进行相应处理以响应变化的过程。
概念解析:
其实与ActiveMQ、RabbipythontMQ等中间件的基本运行模式相类似,观察者模式的基础构建方式非常相近,其分为观察者与被观察者两个部分。
(一)观察者:从字面上看也就是指进行观察的对象,对应来说也就是消息订阅者;
(二)被观察者:当然被观察者也就是指被观察的对象,相应的角色也就是消息发布者。
运行方式:
推:消息以类似广播的形式通知观察者,观察者只能被动、无条件接受;
拉:接收到被观察者的通知,可以自主决定获取消息。
观察者模式的实现
两种方式实现观察者设计模式的实现,具体如下:
【1】手写观察者设计模式
【2】Java phpAPI 提供的观察者设计模式 使用 Java API 提供的 Observer 和 Observeable 实现观察者模式
手写观察者设计模式
编写被观察对象:subject.java
编写观察者接口,起到统一规RsTCEIVYiJ范作用.
实现Observer接口,我们可以有一个或多个观察者对一个subject进行观察
编写主类,进行运行展示
运行接口展示:
通过API实现观察者模式
通过继承Observable父类,构建一个被观察者
实现Observer创建一个观察者类
通过编写主类测试类观察结果:
观察者模式的优缺点
优点:观察者与被观察者抽象耦合,可定义一种稳定的消息触发机制。 缺点:如果被观察者有多个间接的观察者,消息的传递将消耗更多时间,如果观察者与被观察者之间循环依赖,最终会导致系统崩溃。也正因如此与队列消息相类似,我们一般会单独开一个线程让其进行运行,以避免程序堵塞,不能运行的尴尬。
使用场景:
一个抽js象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道编程客栈具体有多少对象将发生改变,可以降低对象之间的耦合度。 一个对象必须通知其他对象,而并不知道这些对象是谁。 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
注意事项:
1、JAVA 中已经有了对观察者模式的支持类。
2、避免循环引用。
3、如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。
到此这篇关于Java设计模式之观察者模式observer pattern详解的文章就介绍到这了,更多相关Java观察者模式内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论