13-设计模式——观察者模式
设计模式——观察者模式
观察者模式 ==> Observer
模式定义:
定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知并更新
Class Diagram
主题(Subject)具有注册(register)和移除(remove)观察者、并通知(notify)所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。
观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。
应用场景:
当更改一个对象的状态可能需要更改其他对象,并且实际的对象集实现未知或动态更改时
优点:
- 符合开闭原则
- 可以在运行时建立对象之间的关系
* java.util.Observable * org.springframework.context.ApplicationListener
package com.example.designpatterns.observer; import java.util.ArrayList; import java.util.List; /** * @program: DesignPatterns * @description: 观察者模式 - Observer * java.util.Observable * org.springframework.context.ApplicationListener * @author: Coder_Pan * @create: 2022-04-14 09:08 **/ public class ObserverTest { public static void main(String[] args) { System.out.println("观察者模式......"); //1、初始化主题对象 Subject subject = new Subject(); //2、创建两个观察者 Task1 task1 = new Task1(); subject.addObserver(task1); Task2 task2 = new Task2(); subject.addObserver(task2); //3、发送通知 subject.notifyObserver("发送通知!!!!!"); } } /** * 主题对象 */ class Subject { /** * 容器 => 容器中存放若干个观察者 */ private List<Observer> containers = new ArrayList<Observer>(); /** * add => 注册观察者 */ public void addObserver(Observer observer){ containers.add(observer); } /** * remove => 移除观察者 */ public void removeObserver(Observer observer) { containers.remove(observer); } /** * 数据发生变化时,需发送通知 */ public void notifyObserver(Object obj) { /** * 循环通知每一个观察者 */ for (Observer item : containers) { item.update(obj); } } } /** * 观察者 */ interface Observer { /** * 主题更新 * @param obj */ void update(Object obj); } /** * 创建任务1 对象 */ class Task1 implements Observer{ @Override public void update(Object obj) { System.out.println( " task1===============>" + obj); } } /** * 创建任务2 对象 */ class Task2 implements Observer{ @Override public void update(Object obj) { System.out.println( " task2===============>" + obj); } }
posted on 2022-04-14 09:33 JavaCoderPan 阅读(14) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南