首页 > 其他分享 >观察者模式

观察者模式

时间:2024-03-01 14:22:05浏览次数:18  
标签:定义 对象 Spring 主题 观察者 模式 事件

察者模式是一种设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当这个主题对象的状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。

在Java中,观察者模式可以使用java.util包中的Observer和Observable来实现。具体步骤如下:

定义主题对象Subject类:Subject类应该维护一个观察者列表,并提供注册、删除和通知观察者的方法。在通知观察者时,需要调用每个观察者对象的update()方法,以便让它们进行相应的操作。

定义观察者对象Observer接口:Observer接口应该定义update()方法,以便主题对象能够通知它们进行相应的操作。

定义具体的观察者对象具体类:具体的观察者类应该实现Observer接口,并在update()方法中编写相应的处理逻辑。

创建主题对象Subject实例:在应用程序中创建主题对象Subject实例,并为它添加相应的观察者对象。

主题对象状态改变时通知观察者:当主题对象状态改变时,调用主题对象的notifyObservers()方法通知所有的观察者对象进行更新。

在Spring框架中,也提供了一种基于观察者模式的事件机制。具体步骤如下:

定义事件类:事件类应该继承ApplicationEvent类,并在其中定义相关的属性和构造方法。这里的ApplicationEvent类是Spring框架中提供的一个基础事件类,用来表示事件本身。

定义事件监听器类:事件监听器类应该实现ApplicationListener接口,并在onApplicationEvent()方法中编写相应的处理逻辑。

发布事件:在需要发布事件的地方,创建事件对象并调用ApplicationContext.publishEvent()方法来发布事件。

Spring自动调用事件监听器:当Spring容器监听到事件的发布时,会自动调用所有注册的事件监听器的onApplicationEvent()方法,从而完成事件处理。

通过使用Spring的事件机制,我们可以让各个组件之间更加解耦,使得应用程序更加灵活,并且易于扩展和修改。

标签:定义,对象,Spring,主题,观察者,模式,事件
From: https://www.cnblogs.com/apelet/p/18046969

相关文章

  • 外观模式(facade pattern)
    外观模式(facadepattern) 外观模式(FacadePattern),也叫门面模式,外观模式的原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别的接口,使子系统更易于使用。外观模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模......
  • 代理模式2 (设计模式)
    ClassLoader的作用在java运行的时候,ClassLoader(类加载器)负责将类文件加载到内存中,并转化为java运行时的java类。ClassLoader是java虚拟的(JVM)的一部分,它的主要作用是动态的加载java类。 1.当java程序需要某个类时,ClassLoader负责将该类的字节码(.class)文件加载到内......
  • 写给rust初学者的教程(一):枚举、特征、实现、模式匹配
    这系列RUST教程一共三篇。这是第一篇,介绍RUST语言的入门概念,主要有enum\trait\impl\match等语言层面的东西。安装好你的rust开发环境,用cargo创建一个空项目,咱们直接上代码。懵逼的同僚可以参考我8年前的rust文章:https://www.iteye.com/blog/somefuture-2275494,虽然8年了,然并不......
  • Ubuntu的性能模式与省电模式:进行科学计算时一定要手动将Ubuntu的CPU模式设置为性能模
    不论是什么系统,windows11还是Ubuntu、Centos、RedHat,其运行时都有一个运行模式的概念,其实这个运行模式就是CPU的性能模式,一般可以分为性能模式和省电模式两种,当然也有介于两者之间的一些中间模式,不过这里只讨论这个终点模式。之所以有这个CPU运行模式这个概念,是因为现在的CPU都......
  • Entity Framework Core 使用HiLo(高低位模式)生成主键
    Hi(高位):数据库生成,比如100、200、300Lo(低位):本地生成,比如101、201、301数据库给本地分配一个范围,范围用于主键的自增。每次连接数据库的时候和当范围用完的时候都会从数据库中重新取出一个范围。实体类:[Table("T_Menu")]publicclassMenu{publicintId{get;set;......
  • SQL Server 数据库模式
    SQLServer中的数据库模式可以帮助确定谁可以对数据库的对象进行访问,也可以作为命名空间,防止来自不同模式的对象名称发生冲突。什么是数据库模式?数据库模式是一种逻辑分组对象,如表,视图,存储过程等。可以指定一个用户登录权限的单一模式,以便用户只能访问他们被授权访问的对象......
  • lua协程 - 把回调模式的代码流程改成顺序执行流程
    像ugui的点击按钮,然后触发相关逻辑,都是回调模式的写法,比如下面代码的ShowAlert调用publicclassTest7:MonoBehaviour{publicGameObjectm_Alert;publicTextm_TxtMsg;publicButtonm_BtnYes;publicButtonm_BtnNo;privateLuaEnvm_LuaEnv;......
  • 原型模式 (设计模式)
    对于熟悉JavaScript语言的前端程序员来说,原型模式是一种比较常用的开发模式,即使JavaScript引入了类的概念,但它也知识基于原型语法糖而已。不过如果你使用的是java C++你就很少使用原型模式。 原型模式的原理和应用: 如果对象的创建成本比较大,而同一个类的不同对象之间差......
  • 设计原则&模式:六大设计原则
     单一职责原则(SRP:SingleReposibility Principle)定义:一个类或者模块只负责完成一个职责。 里氏替换原则(LSP:LiskovSubstitutionPrinciple)定义:所有使用父类的地方可以使用子类的对象,子类可以扩展父类的功能,但是不能替换父类的功能。如果需要替换父类功能,建议——多用组合,......
  • 单例模式 上
    为什么要用单例单例模式理解起来非常容易一个类只允许创建一个对象(或者实例),那这个类就是一个单例,这种设计模式叫做单例设计模式。简称单例模式1.解决线程安全问题2.表示全局唯一比如配置信息类,自系统中,我们只有一个配置文件,当这个配置文件加载到内存之后,以对象的形式存在,理......