当前位置:网站首页>观察者模式
观察者模式
2022-08-01 12:38:00 【51CTO】
《Head First Design Pattern》一书中对观察者模式的定义如下:
The Observer Pattern defines a one-to-many dependency objects so that when one object changes state, all of its dependents are notified and updated automatically.
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
从根本上说,该模式必须包含两个角色:观察者和被观察对象。下面是设计模式中包含角色的UML类图(来自百度百科)。

观察者(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。
被观察对象(Subject)发生了某种变化,从容器中得到所有注册过的观察者,将变化通知观察者。
下面举这样一个例子:比如一个小游戏,A说出一个十进制的数,B说出其对应的二进制结果,C说出其对应的八进制结果,D说出其对应的十六进制结果。
使用观察者模式A可以作为被观察者(Subject),B、C、D可以作为观察者(Observer)。
下面是Java代码示例:
观察者接口:
被观察者接口:
实体被观察者A:就是游戏中的A
实体观察者B:游戏中的B,将A给的数字转成二进制
实体观察者D:游戏中的D,将A给的数字转成十六进制
观察者模式测试代码:我们开始做游戏了
运行结果:
其实Java JDK本身提供了设计模式等额实现:
java.util.Observer是一个接口,观察者接口,相当于我们上面的IObserver接口。我们需要实现一个观察者的时候只需要实现这个接口就OK了。
java.util.Observable是一个类,被观察者类,我们需要实现一个被观察者的时候只需要继承这个类就OK了。
边栏推荐
- 腾讯云原生:Areaki Mesh 在 2022 冬奥会视频直播应用中的服务网格实践
- Transfer learning to freeze the network:
- SQL函数 STR
- 将同级数据处理成树形数据
- 这项工作事关中小学生生命安全!五部门作出联合部署
- 小程序插件如何帮助开发者受益?
- MarkDown公式指导手册
- R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息
- Simulation implementation of new of Js handwritten function
- Excel表格打印时不打印标记填充颜色
猜你喜欢
随机推荐
Dameng replaces the officially authorized dm.key
[Open class preview]: Research and application of super-resolution technology in the field of video image quality enhancement
uniapp读取和写入文件
Audio and Video Technology Development Weekly | 256
How do programmers solve online problems gracefully?
ECCV22|只能11%的参数就能优于Swin,微软提出快速预训练蒸馏方法TinyViT
Pytest e-commerce project combat (below)
Towhee 每周模型
一文带你读懂云原生、微服务与高可用
[5 days countdown] to explore the secret behind the great quality promotion, gift waiting for you to take of $one thousand
.NET性能优化-使用SourceGenerator-Logger记录日志
Favorites|Mechanical Engineer Interview Frequently Asked Questions
Meshlab & Open3D SOR filtering
(ES6 and above and TS) Map object to array
LeetCode_动态规划_中等_313.超级丑数
pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一个小时之前的所有数据(筛选一个小时的范围数据)
【社区明星评选】第24期 8月更文计划 | 笔耕不辍,拒绝躺平!更多原创激励大礼包,还有华为WATCH FIT手表!
kubernetes之DaemonSet以及滚动更新
Js手写函数之new的模拟实现
【云享新鲜】社区周刊·Vol.73- DTSE Tech Talk:1小时深度解读SaaS应用系统设计









