当前位置:网站首页>观察者模式
观察者模式
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了。
边栏推荐
- 【云享新鲜】社区周刊·Vol.73- DTSE Tech Talk:1小时深度解读SaaS应用系统设计
- AI目标分割能力,无需绿幕即可实现快速视频抠图
- STM32 CAN过滤器配置详解
- Deep understanding of Istio - advanced practice of cloud native service mesh
- Simulation implementation of new of Js handwritten function
- 动态库、静态库浅析
- 小程序插件如何帮助开发者受益?
- The difference between undefined and null in JS
- uniapp读取和写入文件
- 深入解析volatile关键字
猜你喜欢

CloudCompare & PCL ICP registration (point to face)
![[5 days countdown] to explore the secret behind the great quality promotion, gift waiting for you to take of $one thousand](/img/de/1e6069e84183d1400c90a6ec574f72.png)
[5 days countdown] to explore the secret behind the great quality promotion, gift waiting for you to take of $one thousand

实现集中式身份认证管理的案例

CAN通信标准帧和扩展帧介绍
![[Open class preview]: Research and application of super-resolution technology in the field of video quality enhancement](/img/fc/cd859efa69fa7b45f173de74c04858.png)
[Open class preview]: Research and application of super-resolution technology in the field of video quality enhancement

芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)

通讯录(静态版)(C语言)(VS)

程序员的自我修养

小程序插件如何帮助开发者受益?

并发编程10大坑,你踩过几个?
随机推荐
【StoneDB Class】入门第二课:StoneDB 整体架构解析
一文带你彻底厘清 Isito 中的证书工作机制
【讲座分享】“营收“看金融
安全又省钱,“15岁”老小区用上管道燃气
Dapr 与 NestJs ,实战编写一个 Pub & Sub 装饰器
数字证书原理
找出相同属性值的对象 累加数量 汇总
Transfer learning to freeze the network:
Js手写函数之new的模拟实现
AI目标分割能力,无需绿幕即可实现快速视频抠图
如何利用DevExpress控件绘制流程图?看完这篇文章就懂了!
Envoy 源码流程图
Qt获取文件夹下所有文件
MySQL调优
[Open class preview]: Research and application of super-resolution technology in the field of video quality enhancement
CAN通信标准帧和扩展帧介绍
软件设计师考点汇总(室内设计师个人总结)
SCHEMA解惑
AI目标分割能力,无需绿幕即可实现快速视频抠图
重磅消息 | Authing 实现与西门子低代码平台的集成