设计模式学习笔记---观察者模式Observer pattern(Java版)
来源:互联网 发布:软件测试的思路 编辑:程序博客网 时间:2024/04/20 05:13
一、场景
网站上,很多人订阅了“NBA主题”新闻,当有这个主题新闻时,就会将这些新闻发给所有订阅的人。(我们可以把多个订阅者、客户称之为观察者;需要同步给多个订阅者的数据封装到对象中,称之为目标。)
二、实质
广播机制
观察者主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)<消息发布>的状态变化时,他需要及时告知一系列对象(观察者对象Observer)<消息订阅>,令他们做出响应。
通知观察者的方式:
推
–每次都会把通知以广播方式发送给所有观察者,所有观察者只能被动接收。
拉
–观察者只要知道有情况即可。至于什么时候获取内容,获取什么内容,都可以自主决定。
三、示例
方式一 自己实现
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
运行结果:
========
3000
3000
3000
========
100
100
100
方式二
JavaSE提供了Java.util.Observable和java.util.Observer来实现观察者模式 此方法通知次序会改变
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
运行结果:
========
3000
3000
3000
========
500
500
500
四、应用场景
–聊天程序的服务器转发给所有客户端
–网络游戏(多人联机对战)场景中,服务器将客户端的状态进行分发
–邮件订阅
–Servlet中,监听器的实现。
–Android中,广播机制
–JDK的AWT中事件处理模型基于观察者模式的委派事件模型
事件源–目标对象
事件监听器–观察者
–京东商城中,群发某商品打折信息
0 0
- 设计模式学习笔记---观察者模式Observer pattern(Java版)
- 设计模式学习笔记---观察者模式Observer pattern(Java版)
- 设计模式学习笔记--观察者模式(Observer Pattern)
- 设计模式学习--观察者模式(Observer Pattern)
- Java设计模式--观察者模式【Observer Pattern】
- 设计模式笔记2:观察者模式(Observer Pattern)
- 设计模式学习(二)-- 观察者模式 Observer Pattern
- 设计模式学习总结:观察者模式(Observer Pattern)
- 浅谈 java 设计模式--观察者模式(Observer pattern)
- Java 设计模式之观察者模式(Observer pattern)
- Java设计模式——观察者模式(Observer Pattern)
- Java设计模式:观察者模式(Observer Pattern)
- Java设计模式:观察者模式(Observer Pattern)续
- Java设计模式——观察者模式(Observer Pattern)
- Java设计模式之观察者模式(Observer Pattern)
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- 观察者设计模式(Observer Pattern)
- 设计模式学习笔记--观察者(Observer)模式
- CGLIB介绍与原理
- http接口测试资料整理系列2--http介绍
- python复习笔记[10] —— 面向对象程序设计
- 笔记——Java之抽象类
- image scale和size的关系与SDScaledImageForKey
- 设计模式学习笔记---观察者模式Observer pattern(Java版)
- 字符串匹配
- 用Criteria进行模糊查询实现简单的搜索功能
- CodeForces
- leetcode---Product of Array Except Self
- 向上转型和向下转型
- 有向图的欧拉道路 UVA
- Leetcode题解:513. Find Bottom Left Tree Value
- RHEL6.5 LVM硬盘管理