当前位置:网站首页>观察者模式
观察者模式
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了。
边栏推荐
- 这项工作事关中小学生生命安全!五部门作出联合部署
- STM32 CAN filter configuration details
- Meshlab & Open3D SOR filtering
- 数据湖 delta lake和spark版本对应关系
- R language ggplot2 visualization: use ggpubr package ggscatter function visualization scatterplot, use xscale wasn't entirely specified X axis measurement adjustment function, set the X coordinate for
- How do programmers solve online problems gracefully?
- 《MySQL核心知识》第6章:查询语句
- [Cloud Enjoying Freshness] Community Weekly Vol.73- DTSE Tech Talk: 1 hour in-depth interpretation of SaaS application system design
- [Unity3D Plugin] AVPro Video Plugin Share "Video Player Plugin"
- 库函数的模拟实现(strlen)(strcpy)(strcat)(strcmp)(strstr)(memcpy)(memmove)(C语言)(VS)
猜你喜欢

一文带你读懂云原生、微服务与高可用

重磅消息 | Authing 实现与西门子低代码平台的集成

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

阿里云官方 Redis 开发规范

深入解析volatile关键字

Alibaba Cloud Official Redis Development Specification

将同级数据处理成树形数据

STM32 CAN过滤器配置详解

win10系统重装,无法登录进行同步的情况下chrome数据恢复

CAN通信的数据帧和远程帧
随机推荐
Several methods of appending elements are commonly used in js: append, appendTo, after, before, insertAfter, insertBefore, appendChild
字体反爬之好租
The difference between undefined and null in JS
The use of Ts - Map type
动态库、静态库浅析
Js手写函数之new的模拟实现
快速幂---学习笔记
Transfer learning to freeze the network:
一文带你彻底厘清 Isito 中的证书工作机制
易周金融分析 | 银行ATM机智能化改造提速;互联网贷款新规带来挑战
芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)
MMF的初步介绍:一个规范化的视觉-语言多模态任务框架
The four methods of judging JS data type
MySQL调优
Fault 007: The dexp derivative is inexplicably interrupted
Meshlab & Open3D SOR filtering
Feign 从注册到调用原理分析
SQL function SQRT
英特尔全方位打造算力基础,助推“算”赋百业
How to get the address of WeChat video account (link address of WeChat public account)