1.概述

在我们平时的工作中,填写分布填写数据,比如填入商品的基本信息,所有人信息,明细信息,这种情况就可以使用责任链模式来处理。

2.代码实现

2.1商品对象

public class ProductDto {

    private String name;

    private String owner;

    private String detail;
}

2.2处理器基类

package com.study.chain;

public abstract class IHandler<T> {

    private IHandler next;

    public void setNext(IHandler next) {
this.next = next;
} public boolean hasNext() {
return next != null;
} public abstract Boolean handlerCurrent(T object);
//先处理当前,如果返回为true其还有下一个处理器,则调用下一个处理器。
public void handler(T object){
boolean rtn =handlerCurrent(object);
if(hasNext() && rtn){
next.handler(object);
}
}
}

2.3商品基础信息类

其中 Order 表示类的排序

@Order(1)
@Component
public class ProductBaseHandler extends IHandler<ProductDto> {
@Override
public Boolean handlerCurrent(ProductDto object) {
System.out.println("商品基础校验" + object.getName());
return true;
}
}

2.4商品所有人

@Order(2)
@Component
public class ProductOwnerHandler extends IHandler<ProductDto> {
@Override
public Boolean handlerCurrent(ProductDto object) {
System.err.println("商品拥有者校验" + object.getOwner());
return true;
}
}

2.5商品明细

@Component
@Order(3)
public class ProductDetailHandler extends IHandler<ProductDto> {
@Override
public Boolean handlerCurrent(ProductDto object) {
System.err.println("商品明细信息校验" + object.getDetail());
return true;
}
}

2.6处理器工厂类

public class CommonChainFactory<T> {

    public IHandler<T> first;

    public CommonChainFactory(List<IHandler<T>> list){
for(int i=0;i<list.size()-1;i++){
list.get(i).setNext(list.get(i+1));
}
first= list.get(0);
} public void execute(T objectDto){
first.handler(objectDto);
}
}

由于这个是泛型类,需要通过配置类进行实例化。

2.7 配置工厂类

@Configuration
public class FactoryConfig { @Bean
public CommonChainFactory<ProductDto> productChainFactory(List<IHandler<ProductDto>> list){
return new CommonChainFactory<>(list);
}
}

2.8 使用

	@Resource
private CommonChainFactory<ProductDto> productChainFactory; @GetMapping("/chain")
public void chain() {
ProductDto prod = new ProductDto("苹果","张三","陕西冰糖心");
productChainFactory.execute(prod);
}

可以看到结果:

商品基础校验苹果

商品拥有者校验张三

商品明细信息校验陕西冰糖心

springboot 实现通用责任链模式的更多相关文章

  1. 24种设计模式--责任链模式【Chain ofResponsibility Pattern】

    中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女 ...

  2. 第 17 章 责任链模式【Chain of Responsibility Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> 中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的 ...

  3. Java设计模式—责任链模式

    责任链模式的定义: 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 责任链模式的重点是在"链& ...

  4. 责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析

    本文来自网易云社区 作者:乔安然 1. Chain of Responsiblity 定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链 ...

  5. 责任链模式Scala的7种实现

    责任链模式是经典的GoF 23种设计模式之一,也许你已经了解这种模式.不管你是否熟悉,建议读者在阅读本文之前,不妨先思考下面三个问题: (1) 如何用多种风格迥异的编程范式来实现责任链模式? (2) ...

  6. java设计模式解析(11) Chain责任链模式

    设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析(4) ...

  7. 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击

  8. Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理

    原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...

  9. 设计模式学习笔记(十四)责任链模式实现以及在Filter中的应用

    责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求.当有请求发生时,可将请求沿着这条 ...

  10. 23种设计模式--责任链模式-Chain of Responsibility Pattern

    一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...

随机推荐

  1. Angular Material 18+ 高级教程 – CDK Table

    前言 CDK Table 是 Angular Material 对 <table> 的抽象 (无 styles) 封装. 无 styles 的 table 有什么好封装的呢? CDK Ta ...

  2. 如何用VMWARE创建一个Linux虚拟机

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们都是需要接触Linux服务器的,一般部署应用都是部署在Linux服务器上的~ 但一般的服务器要么需要购买,要么只是公司里的,那么有没有免费的L ...

  3. 下载 Youtube 上的视频的方法

    事件起因: 某项目组同事需要下载 Youtube 上的视频作为参考视频 解决办法: https://www.converto.io/ -= 实测有效 =-  我个人一直在用该网站可以下载,非常好用,下 ...

  4. RabbitMQ协议基础及C++和Java混合开发

    目前面对大多数的需要在异构系统间进行消息传递技术路线,大多会选择socket或webservice.这两种技术的共同特点是耦合紧,调试依赖双方同步,但是效率高.除此以外,使用消息队列(MQ)的应用场景 ...

  5. C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  6. Android USB 整条通知链分析

    以Android13 为例:在Android 13中,USB插入拔出事件的通知链从硬件层到应用层,依次经过硬件.内核.HAL.Framework.以及应用广播等多个模块,整个流程涉及的具体文件和逻辑如 ...

  7. Camera 冷启动阶段分解

    目录 一.Camx trace 调试开关设置 1.设置 camxoverridesettings trace开关 2. 重启后设置开启camx trace 开关 二.Camera 冷启动阶段分解分析 ...

  8. Nuxt.js 应用中的 modules:before 事件钩子详解

    title: Nuxt.js 应用中的 modules:before 事件钩子详解 date: 2024/10/15 updated: 2024/10/15 author: cmdragon exce ...

  9. manim边做边学--数轴

    数轴是数学中的一个基本概念,它规定了原点.正方向和单位长度的直线. Manim中的NumberLine就是一个专门用来表示数轴的对象,它允许用户设置数轴的范围.间隔和显示长度等参数,从而灵活地在动画中 ...

  10. 用微软商店商店安装 Python

    在安装 Python 时,除了在官网 www.python.org 下载,还可以用微软商店下载 安装完成后,其目录位于C:\Users\<用户名>\AppData\Local\Micros ...