SpringBoot日常:观察者模式应用 冷不防 2024-02-17 09:27 15阅读 0赞 #### 文章目录 #### * * 前言 * 1、什么是观察者模式? * 2、观察者模式的结构 * 3、观察者模式的实现 * * 创建一个主题接口 * 实现一个TV主题的实现类 * 创建一个订阅者的接口 * 创建两个个订阅者的实现类 * 接口调用测试 ### 前言 ### 对于很多程序员,平时写代码为了方便,可能一股脑就按面向过程那样一下把业务逻辑编写下来,少有会去额外思考设计模式或者算法。这种情况其实不利于我们的编码维护,在本文,将介绍设计模式中的观察者模式,通过本文的介绍将帮助你快速理解和应用。 ### 1、什么是观察者模式? ### 观察者模式是一种行为型设计模式,又叫发布-订阅模式(Publish/Subscribe),它定义了一种一对多的依赖关系,使得多个观察者对象可以同时监听并被通知被观察者对象的状态变化。观察者模式在实际应用中具有广泛的应用场景。 ### 2、观察者模式的结构 ### 观察者模式包括以下几个角色: **(1)抽象主题 (Subject)角色** 它是指被观察的对象,又称为主题,定义了一个观察者集合,一个观察目标可以接受任意数量的观察者来观察,它提供一系列方法来增加和删除观察者对象。 **(2)具体主题(Concrete Subject) 角色** 也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。 **(3)抽象观察者(Observer)角色** 它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。 **(4)具体观察者(Concrete Observer)角色** 实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态 ### 3、观察者模式的实现 ### #### 创建一个主题接口 #### public interface Subject { /** * 注册 * @param observer */ void add(MyObserver observer); /** * 剔除 * @param observer */ void remove(MyObserver observer); /** * 通知 * @param state */ void notifyState(String state); } #### 实现一个TV主题的实现类 #### public class TvSubject implements Subject{ private List<MyObserver> observerList = new ArrayList<>(); @Override public void add(MyObserver observer) { observerList.add(observer); } @Override public void remove(MyObserver observer) { observerList.remove(observer); } @Override public void notifyState(String state) { for (MyObserver observer : observerList) { observer.update(state); } } } #### 创建一个订阅者的接口 #### public interface MyObserver { void update(String message); } #### 创建两个个订阅者的实现类 #### public class ZhangsanObserver implements MyObserver{ @Override public void update(String message) { System.out.println("Zhangsan"+message); } } public class LisiObserver implements MyObserver{ @Override public void update(String message) { System.out.println("Lisi"+message); } } #### 接口调用测试 #### @GetMapping(value = "/observer", produces = MediaType.APPLICATION_JSON_VALUE) public void observer() { Subject subject = new TvSubject(); ZhangsanObserver zhangsanObserver = new ZhangsanObserver(); subject.add(zhangsanObserver); subject.add(new LisiObserver()); subject.notifyState("CCTV5"); subject.notifyState("星光大道"); subject.remove(zhangsanObserver); subject.notifyState("广东体育"); } ![在这里插入图片描述][a66c8d093e7f4586a3d2eb84e7d641fc.png] [a66c8d093e7f4586a3d2eb84e7d641fc.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/02/06/bec9a800e301475e9108d32e9a60bfc9.png
相关 SpringBoot日常:观察者模式应用 文章目录 前言 1、什么是观察者模式? 2、观察者模式的结构 3、观察者模式的实现 创建一个主题 冷不防/ 2024年02月17日 09:27/ 0 赞/ 16 阅读
相关 观察者模式 观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态上发生变化时,会通知所有观察者对 梦里梦外;/ 2022年08月03日 08:20/ 0 赞/ 43 阅读
相关 观察者模式 js观察者模式 <!DOCTYPE> <html> <head> <title> New Document </title> 刺骨的言语ヽ痛彻心扉/ 2022年07月21日 00:24/ 0 赞/ 36 阅读
相关 观察者模式 什么是观察者模式 有人这么说 > 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 > > 这个主题对象在状态上发生变化时,会通知所有观 梦里梦外;/ 2022年07月20日 12:05/ 0 赞/ 302 阅读
相关 观察者模式 场景描述: 一个气象站应用,可以实时获取温度、湿度和气压信息,气象站提供一个封装好的类WeatherData,该类有最新的气象信息,当这些信息发生变动的时候,类中的meas 叁歲伎倆/ 2022年06月14日 10:24/ 0 赞/ 194 阅读
相关 观察者模式 观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 观察者模式图: ![输入图片说明][13105107_Mf 旧城等待,/ 2022年06月03日 02:41/ 0 赞/ 298 阅读
相关 观察者模式 什么是观察者模式? 简单的来说,观察者模式=出版者+订阅者。用比较书面的话来说的话是:定义了对象之间的一对多依赖,当一所对应的对象状态改变时,它的所有依赖者都会收到通知并 你的名字/ 2022年02月01日 13:53/ 0 赞/ 426 阅读
相关 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 意图:定义对象 系统管理员/ 2021年09月17日 01:36/ 0 赞/ 512 阅读
相关 观察者模式 对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 ... 小灰灰/ 2020年06月13日 05:42/ 0 赞/ 606 阅读
还没有评论,来说两句吧...