当前位置: 首页 > news >正文

JAVA观察者模式demo【设计模式系列】

有时候我们可能触发一个事件后,需要通知多个目标,这些目标有自己的处理逻辑,一个比较好理解的例子:我们的游戏角色四周都是小怪,我们往前走了一步,可能进入了一些小怪的攻击范围,这时候就需要通知四周小怪进行攻击行为,小怪们的攻击方式有不同,而没有进入攻击范围的小怪则无动于衷,就可以使用观察者模式。上代码~

1.创建一个观察者服务接口

public interface ObserveService {void handle();
}

2.创建3个观察者,实现【ObserveService】接口

public class ObserveServiceImpl1 implements ObserveService{@Overridepublic void handle() {System.out.println("观察者处理逻辑1");}
}

3.创建被观察者

public class ObserveFactory {private List<ObserveService> observeServiceList = new ArrayList<>();/*** 添加观察者* @param observeService*/public void addObserveService(ObserveService observeService){observeServiceList.add(observeService);}/*** 通知观察者*/public void notifyObserve() {for (ObserveService observeService : observeServiceList) {observeService.handle();}}
}

4.根据业务,把观察者添加进集合,再根据业务通知观察者们

@Testpublic void observeTest() {ObserveServiceImpl1 observeServiceImpl1 = new ObserveServiceImpl1();ObserveServiceImpl2 observeServiceImpl2 = new ObserveServiceImpl2();ObserveServiceImpl3 observeServiceImpl3 = new ObserveServiceImpl3();//根据业务逻辑,把观察者添加到集合中ObserveFactory observeFactory = new ObserveFactory();observeFactory.addObserveService(observeServiceImpl1);observeFactory.addObserveService(observeServiceImpl2);observeFactory.addObserveService(observeServiceImpl3);//根据业务逻辑,通知观察者们observeFactory.notifyObserve();}

5.查看执行结果

在这里插入图片描述

以上是我对观察者模式的理解,有不对的地方,欢迎留意指导!

http://www.dtcms.com/a/270646.html

相关文章:

  • WebSocket实现多人实时在线聊天
  • 【TCP/IP】2. 计算机网络与因特网体系结构
  • 两张图片对比clip功能
  • 后端id设置long类型时,传到前端,超过19位最后两位为00
  • 解锁DevOps潜力:如何选择合适的CI/CD工作流工具
  • 【Linux | 网络】socket编程 - 使用UDP实现服务端向客户端提供简单的服务
  • python:ImportError: cannot import name ‘ParameterSource‘ from ‘click.core‘
  • Linux 中的 .bashrc 是什么?配置详解
  • ESP32的OTA升级详解:2. OTA低层组件app_update介绍
  • 增强检索知识库系统1
  • 模型内部进行特征提取时,除了“减法”之外,还有哪些技术
  • 线程池与并发工具:优化多线程执行!
  • [特殊字符]【跨数据库支持】SQL 秒转 ArkTS 实体!HarmonyOS 开发者的数据库适配神器 gotool.top
  • Node.Js是什么?
  • AI+智慧园区 | 事件处置自动化——大模型重构园区治理逻辑
  • 【图像处理基石】如何检测到画面中的ppt并对其进行增强?
  • 洛谷 P1104 生日---排序
  • Android Studio 2024,小白入门喂饭级教程
  • 滑动窗口的初步了解
  • 记录一下:成功部署k8s集群(部分)
  • 【音视频】TS协议介绍
  • 搭建商城系统
  • 【Java】【力扣】3.无重复字符的最长字串
  • Flutter基础(前端教程⑧-数据模型)
  • Elasticsearch RESTful API入门:基础搜索与查询DSL
  • C#项目 在Vue/React前端项目中 使用使用wkeWebBrowser引用并且内部使用iframe网页外链 页面部分白屏
  • 数据管理新范式:基于Docker的私有云存储系统构建指南
  • 十一、K8s细粒度权限管理RBAC
  • 异步进阶:C#的Task.WhenAll——如何开启多个异步任务
  • ReactNative【实战系列教程】我的小红书 6 -- 购物(含商品搜索、商品分类、商品列表)