当前位置:网站首页>观察者模式
观察者模式
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了。
边栏推荐
猜你喜欢

Excel表格打印时不打印标记填充颜色

Pytest电商项目实战(下)

Find objects with the same property value Cumulative number Summarize

2022 Go生态圈 rpc 框架 Benchmark

收藏|机械工程师面试常问问题

【讲座分享】“营收“看金融

如何利用DevExpress控件绘制流程图?看完这篇文章就懂了!

蔚来又一新品牌披露:产品价格低于20万

故障007:dexp导数莫名中断

【StoneDB Class】Introduction Lesson 2: Analysis of the Overall Architecture of StoneDB
随机推荐
Qt get all files in a folder
R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息
[Cloud Enjoying Freshness] Community Weekly Vol.73- DTSE Tech Talk: 1 hour in-depth interpretation of SaaS application system design
uniapp读取和写入文件
R language fitting ARIMA model: use the auto.arima function in the forecast package to automatically search for the best parameter combination, model order (p, d, q), set the seasonal parameter to spe
The CAN communication standard frame and extended frame is introduced
通配符SSL证书不支持多域名吗?
R语言两个时间序列数据的滞后相关性可视化:使用forecast包的ccf函数绘制交叉相关函数,根据可视化结果分析滞后相关性
Visualization of lag correlation of two time series data in R language: use the ccf function of the forecast package to draw the cross-correlation function, and analyze the lag correlation according t
[CLion] CLion always prompts "This file does not belong to any project target xxx" solution
How to Integrate Your Service Registry with Istio?
pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一个小时之前的所有数据(筛选一个小时的范围数据)
CloudCompare&PCL ICP配准(点到面)
【StoneDB Class】Introduction Lesson 2: Analysis of the Overall Architecture of StoneDB
易周金融分析 | 银行ATM机智能化改造提速;互联网贷款新规带来挑战
并发编程10大坑,你踩过几个?
如何利用DevExpress控件绘制流程图?看完这篇文章就懂了!
Beyond Compare 4 试用期到期
leetcode/submatrix element sum
CAN通信标准帧和扩展帧介绍