设计模式-行为型模式-观察者模式

news/2024/9/23 14:17:56/

观察者模式用于定义对象间的一种一对多的依赖关系,使得当一个对象状态变化时,其所有依赖对象都会收到通知并自动更新

/*** 行为型模式--观察者模式* 观察者模式用于定义对象间的一种一对多的依赖关系,使得当一个对象状态变化时,其所有依赖对象都会收到通知并自动更新*/
public class ObserverMode {// 观察者接口interface Observer {void update();}// 主题接口interface Subject {void registerObserver(Observer observer);void removeObserver(Observer observer);void notifyObservers();}// 具体主题类static class ConcreteSubject implements Subject {private final java.util.List<Observer> observers = new java.util.ArrayList<>();public void registerObserver(Observer observer) {observers.add(observer);}public void removeObserver(Observer observer) {observers.remove(observer);}public void notifyObservers() {for (Observer observer : observers) {observer.update();}}}// 具体观察者类static class ConcreteObserver implements Observer {public void update() {System.out.println("Received message: Observer is notifyObservers");}}// ConcreteSubject是一个具体的主题类,它实现了Subject接口,并包含了一组观察者。// ConcreteObserver是一个具体的观察者类,它实现了Observer接口。// 通过观察者模式,我们可以实现对象间的解耦,当主题状态发生变化时,观察者会收到通知并进行相应的更新// 使用观察者模式public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();Observer observer = new ConcreteObserver();subject.registerObserver(observer);subject.notifyObservers();subject.removeObserver(observer);}
}


http://www.ppmy.cn/news/1438305.html

相关文章

STM32学习和实践笔记(21):定时器中断实验

通用定时器配置步骤如下&#xff1a; 第一步&#xff1a;使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟 第二步&#xff1a;初始化定时器参数,包含自动重装值&#xff0c;分频系数&#xff0c;计数方式等 voidTIM_TimeBaseInit(TIM_T…

leetcode145--二叉树的后序遍历

1. 题意 求后序遍历 2. 题解 2.1 递归 class Solution { public:void addPost(TreeNode *root, vector<int> &res) {if ( nullptr root)return ;addPost(root->left, res);addPost(root->right, res);res.emplace_back( root->val );}vector<int>…

GraphicConverter 12 for Mac:强大的图像编辑与管理工具

GraphicConverter 12 for Mac是一款功能强大的图像编辑与管理软件&#xff0c;为用户提供了全面而高效的图像处理体验。 GraphicConverter 12 for Mac v12.1.1(6485)中文激活版下载 首先&#xff0c;GraphicConverter 12支持多种主流图像格式的导入和导出&#xff0c;包括JPEG、…

力扣146. LRU 缓存

Problem: 146. LRU 缓存 文章目录 题目描述思路复杂度Code 题目描述 思路 主要说明大致思路&#xff0c;具体实现看代码。 1.为了实现题目中的O(1)时间复杂度的get与put方法&#xff0c;我们利用哈希表和双链表的结合&#xff0c;将key作为键&#xff0c;对应的链表的节点作为…

【树莓派4B】如何点亮树莓派的LED灯

在之前一系列文章中&#xff0c;使用python、行人入侵检测&#xff0c;确没有使用树莓派的硬件。控制引脚进行输出&#xff1a; 如何写python点亮led灯闪烁&#xff0c;我灯接在gpio13,GPIO19,gpio26。我都想闪烁。 你可以使用Python的GPIO库来控制树莓派上的LED灯。首先&…

提升你的C编程技能:使用cURL下载Kwai视频

概述 本文将介绍如何利用C语言以及cURL库来实现Kwai视频的下载。cURL作为一个功能强大的网络传输工具&#xff0c;能够在C语言环境下轻松地实现数据的传输。我们还将探讨如何运用代理IP技术&#xff0c;提升爬虫的匿名性和效率&#xff0c;以适应Kwai视频平台的发展趋势。 正…

STM32之串口中断接收丢失数据

五六年没搞STM32了&#xff0c;这个项目一切都挺顺利&#xff0c;万万没想到被串口接收中断恶心到了。遇到的问题很奇怪 HAL_UART_Receive_IT(&huart1, &rx_buffer[rx_index], LCD_UART_LEN); 这个代码中 LCD_UART_LEN1的时候&#xff0c;接收过来的数据&#xff0c;数…

德思特车载天线方案:打造智能互联的公共安全交通网络

作者介绍 一、方案介绍 随着自动驾驶与智慧汽车概念的逐步推进&#xff0c;人们对汽车的交互性、智能性、互联性有了更高的要求。今天&#xff0c;大多数汽车制造商和供应商普遍将GNSS定位功能与其他信号如广播、电视、蓝牙、Wifi一起集成到汽车中&#xff0c;包括博世、大陆、…