首页 > 其他分享 >springboot 实现通用责任链模式

springboot 实现通用责任链模式

时间:2024-10-26 17:44:44浏览次数:1  
标签:通用 springboot object class 责任 IHandler ProductDto next public

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,object,class,责任,IHandler,ProductDto,next,public
From: https://www.cnblogs.com/yg_zhang/p/18504269

相关文章

  • springboot二手物品交易平台-计算机毕业设计源码02234
    目 录摘要1绪论1.1研究背景及意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据流程3.3.2业务流程2.3功能分析2.3.1功能性分......
  • 【源码+论文】Java毕业设计:基于SpringBoot协同过滤算法的汽车推荐网站(Mysql数据库)
    ✅更多源码|课设......
  • vue3+java+springboot在线考试系统(08169)
    目录功能介绍具体实现截图技术介绍开发核心技术介绍:技术创新点vue3和vue2的区别:核心代码部分展示非功能需求分析系统开发流程软件测试源码获取功能介绍随着社会的发展,系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨......
  • 107 基于springboot+vue停车场管理系统
    背景随着科学技术发展,计算机已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。人类社会进入了全新的信息化的时代。停车场系统一直是信息管理的一大难题,停车场的人数多,信息量大,此时寻找有效便捷的......
  • Springboot计算机毕业设计电影影评管理系统wej6a
    Springboot计算机毕业设计电影影评管理系统本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,电影类型,电影信息,个人影评开题报告内容一、项目背景与意义在数字化时代,电影作为一种重要的文化......
  • Springboot计算机毕业设计电影推荐系统37iza
    Springboot计算机毕业设计电影推荐系统本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,微电影,电影分类,举报信息,评分信息开题报告内容一、项目背景与意义随着网络视频平台的兴起,电影和微电......
  • Springboot计算机毕业设计电影推荐系统4y2kt
    Springboot计算机毕业设计电影推荐系统本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,电影信息,电影分类,影院信息,影视资讯开题报告内容一、项目背景与意义在信息爆炸的时代,电影作为一种重......
  • Springboot计算机毕业设计电影售票系统7pm1w
    Springboot计算机毕业设计电影售票系统本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,电影信息,类型,影院名称,场次信息开题报告内容一、项目背景与意义随着互联网技术的飞速发展,线上购票已......
  • Springboot计算机毕业设计弹唱教学分享平台u0252
    Springboot计算机毕业设计弹唱教学分享平台本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,乐谱分类,乐谱信息,课程分类,课程信息,课程购买开题报告内容进度安排:1、2024.12.20-2025.1.1:选题......
  • Springboot地产项目管控平台的设计与实现f9ss2
    Springboot地产项目管控平台的设计与实现f9ss2本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,房屋类型,商品房,二手房,房屋求购开题报告内容一、研究背景与意义随着城市化进程的加速和房地......