混合乱用模式之《观察者模式》AND《责任链模式》

news/2024/12/17 22:16:03/文章来源:https://www.cnblogs.com/euler-blog/p/18613517

有时候面对复杂的场景,就想着怎么解耦、怎么复用、怎么扩展,然后无意间各种设计模式就拧巴在一起了。

责任链和观察者的区别

责任链强调的是顺序,前后可能有逻辑关系。而观察者体现的是的独立性。虽然都有传递消息通知执行的功能,但是侧重点不同。

两个结合使用

我的这个业务场景正好符合混合使用。因为一个消息发布后,可能会通知多个observer,同时在一个observer上执行逻辑的时候,可能会有很长的链路要走,所以可能会有下一个处理的handler。

有各个observer需要实现的dealWithMessage方法,也有nextProcessor 处理器,整体属于一个observer

MessageObserver
package com.xxx.sales.saicorder.outerapp;import com.xxx.sales.saicorder.outerapp.tmall.dto.MessageDTO;
import com.xxx.sales.saicorder.outerapp.tmall.dto.MessageDealResultDTO;
import com.taobao.api.ApiException;/*** 消息处理方案*/
abstract public class MessageObserver {/*** 后面紧接着要处理的业务* 这里通常是将一个业务线上的很长的执行步骤,按照某一个维度进行垂直分割以后,形成的一个chain.* 执行的时候是按照业务线依次执行的。如果可以一步完成,就没有next processor*/private MessageObserver nextProcessor;public MessageObserver(MessageObserver nextProcessor) {this.nextProcessor = nextProcessor;}/*** 没有next processor的可以直接无参构造*/public MessageObserver() {}/*** 处理逻辑** @param messageData* @param contextObject* @return*/public abstract MessageDealResultDTO dealWithMessage(MessageDTO messageData, MessageDealResultDTO contextObject) throws ApiException;public MessageDealResultDTO doProcessor(MessageDTO messageData, MessageDealResultDTO contextObject) throws ApiException {dealWithMessage(messageData, contextObject);if (nextProcessor != null) {nextProcessor.doProcessor(messageData, contextObject);}return contextObject;}}

观察者使用

image
image

这些模式的用的算是比较多的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/854538.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hadoop启动hdfs时namenode消失

解决HDFS无法启动namenode,报错Premature EOF from inputStream;Failed to load FSImage file, see error(s) above for more info一.情况描述 启动hadoop后发现无法打开hdfs web界面,50070打不开,于是jps发现少了一个namenode: 查看日志信息,发现如下报错:2022-01-03 2…

markdown最基本的语法快捷语法运用

Markdown学习 后缀xxx.md 标题: +标题名字(#后要加空格)或者ctrl+数字也可以快速 二级标题##(最后一个#后要加空格) 同理...(三级 四级 最多到六级...) 字体 hello,world! **之间的字体是斜体 引用 (>+空格) 分割线 三个-或者三个* 图片插入:!+[命名]+(图片链接地址…

【Azure Batch Account】批处理服务是否可以固定出口访问IP地址呢?

问题描述 使用Azure Batch Account服务(批处理),所访问的资源受防火墙保护。现在需要把Batch Account服务池中的实例地址IP加入到防火墙白名单中,但是由于Batch Account被没有指定的出口访问IP地址,所以需要把Batch Account服务的全部IP地址加入到白名单中,但是,它的范围…

Spring Bean 是单例的吗?如何保证并发安全?

引言 面试中,经常会被问到这样一个问题:“Spring Bean 是单例的吗?如果是单例如何保证并发安全呢?”,这两个问题看似没有关联,其实一点也不挨着 😂,为什么呢?请听我来“狡辩”。 首先,单例 Bean 本身并不会直接导致线程安全问题。真正影响线程安全性的因素是该单例对…

项目中的《访问者模式》

这个模式核心思想是将基本的数据对象和对应的操作相互分离。数据对象就只是数据对象,如果想要扩展操作,就扩展对应的visitor。 这种模式下的两次分派 第一次分派,是将对数据对象本身进行分派,可以有不同的实现。 第二次分派,是visitor接收不同的数据对象。 结果就是数据对…

【亲测能用】Photoshop 2025 v26.1.0正式版(ps2025下载)最新免费激活版

软件简介 说到 Adobe Photoshop,我们可以有把握地说它是当今排名第一的图形软件。世界各地数以百万计的设计师、摄影师和艺术家使用 Photoshop 将不可能变成可能。从海报到包装,从基本的横幅到精美的网站,从令人难忘的徽标到引人注目的图标,Photoshop 不断推动创意世界的发…

阅读笔记20241217

1、UAV实施无跑道着陆技术面临着巨大的挑战,不仅依赖于先进的飞行控制技术,而且还依赖于有效的轨迹优化方法。👉引出轨迹优化问题 (1)面临困难与挑战 (2)该技术在那些方面有广泛的应用 2、阐述现有的轨迹优化方法并分析优缺点👉引出凸优化算法 (1)间接法:将轨迹优…

麦肯锡高效解决复杂问题法:七步解决问题法 (又名:七步成诗法)

前言 在日常工作、生活中,会遇到各种各样的问题,有简单问题有复杂问题。 遇到简单的问题,马上就可以找到答案然后解决它。但是遇到复杂问题,模糊性大,不确定性多,这样的问题该怎么解决呢? 为了解决这种复杂的问题,有很多思维模型和分步骤分析框架被人们设计出来,这些框…

13line-height-CSS常见选择器-CSS伪类

一、line-height常用(非常重要的) line-height用于设置文本的行高 行高可以先简单的理解为一行文字所占据的高度主要作用是文本的行高 为什么文本需要行高呢?渲染出来给用户看起来比较舒服,为了方便文本的阅读有了行高之后可以明显的发现便于阅读了。行高的严格定义是:两行…

使用Swing组件

译自https://docs.oracle.com/javase/tutorial/uiswing/components/index.html 课程介绍 Using Top-Level Containers 本章讲解了如何使用 JFrame、JDialog 和 JApplet 类共享的功能——内容窗格、菜单栏和根窗格。还讨论了容器层次结构,即顶层容器所包含的组件树。 The JComp…

火灾监测报警摄像机助力建筑安全

火灾监测报警摄像机采用高清晰度摄像头和智能识别系统,能够全天候监测建筑内部的情况,一旦发现烟雾或火焰,系统会立即触发报警机制,及时通知建筑管理人员和消防部门,快速采取有效的灭火措施。这种实时监测和预警功能,大大提高了火灾的检测速度和处理效率,有效降低了火灾…

备份与恢复策略

title: 备份与恢复策略 date: 2024/12/17 updated: 2024/12/17 author: cmdragon excerpt: 数据备份与恢复是数据库管理中至关重要的组成部分,它确保在数据丢失、损坏或灾难发生时,能够快速恢复系统到正常运行状态。 categories:前端开发tags:数据备份 数据恢复 MySQL备份 灾…