与枚举结合的策略模式

枚举类:

 package com.dtranx.tools.corpora.businessapi.enums;

import com.dtranx.tools.commons.vo.EnumResponseVo;
import com.google.common.collect.Lists;

import java.util.List;

/**
 * @ClassName SimpleSearchMode
 * @Description TODO
 * @Date 2024/5/28 15:55
 * @Author ly
 **/
public enum SimpleSearchMode {
    TM(1,"TM","语料库"),
    RTM(2,"RTM","反选库"),
    STM(3,"STM","这个项目对应选择的参考库里有STM标签的语料库的结果"),
    TM_STM(4,"TM_STM","语料库的基础上只查参考库中包含STM标签的结果"),
    RTM_STM(5,"RTM_STM","反选库的基础上只查参考库中包含STM标签的结果");

    private int value;

    private String code;

    private String desc;

    SimpleSearchMode(int value, String code, String desc) {
        this.value = value;
        this.code = code;
        this.desc = desc;
    }

    public static List<EnumResponseVo> getEnums(){
        SimpleSearchMode[] values = SimpleSearchMode.values();
        List<EnumResponseVo> enumResponseVos = Lists.newArrayList();
        for(int i = 0;i<values.length;i++){
            EnumResponseVo build = EnumResponseVo.builder()
                    .value(values[i].value)
                    .code(values[i].code)
                    .desc(values[i].desc).build();
            enumResponseVos.add(build);
        }
        return enumResponseVos;
    }
}

抽象策略:

package com.dtranx.tools.corpora.business.strategy.matchmode;

import com.dtranx.tools.commons.util.ScanSupport;
import com.dtranx.tools.corpora.abilityapi.req.MatchingReqVo;
import com.dtranx.tools.corpora.business.service.LibraryBusinessInfoService;
import com.dtranx.tools.corpora.businessapi.enums.SimpleSearchMode;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;

import java.util.Map;
import java.util.Set;

/**
 * @ClassName AbstractMatchMode
 * @Description TODO
 * @Date 2024/5/30 18:24
 * @Author ly
 **/
@Slf4j
public abstract class AbstractMatchMode {

    protected static final Map<SimpleSearchMode, AbstractMatchMode> SEARCH_MODE = Maps.newHashMap();


    static{
        Class clazz = AbstractMatchMode.class;
        Set<Class<?>> classes = null;
        try {
            classes = ScanSupport.classInfos(clazz.getPackage().getName());
        } catch (Exception e) {
            log.error("扫描搜索模式策略失败:",e);
        }
        if(CollectionUtils.isNotEmpty(classes)) {
            for (Class<?> aClass : classes) {
                if(ScanSupport.validate(aClass.getSuperclass(),clazz)){
                    try {
                        AbstractMatchMode abstractModeStrategy = (AbstractMatchMode) aClass.newInstance();
                        SimpleSearchMode mode = abstractModeStrategy.getMode();
                        SEARCH_MODE.put(mode,abstractModeStrategy);
                    } catch (Exception e) {
                        log.error("初始化搜索模式策略失败:",e);
                    }
                }
            }
        }
    }

    public static void handleMatchReqVo(SimpleSearchMode simpleSearchMode,MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService){
        if(simpleSearchMode == null) {
            return;
        }
        AbstractMatchMode matchMode = SEARCH_MODE.get(simpleSearchMode);
        if(matchMode == null){
            return;
        }
        matchMode.handleMatchReqVo(matchingReqVo,libraryBusinessInfoService);
    }


    /**
     * 处理MatchingReqVo
     * @param matchingReqVo
     * @param libraryBusinessInfoService
     */
    protected abstract void handleMatchReqVo(MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService);

    /**
     * 获取搜索类型
     * @return
     */
    protected abstract SimpleSearchMode getMode();

}

具体策略:

package com.dtranx.tools.corpora.business.strategy.matchmode;

import com.dtranx.tools.corpora.abilityapi.req.MatchingReqVo;
import com.dtranx.tools.corpora.business.service.LibraryBusinessInfoService;
import com.dtranx.tools.corpora.businessapi.enums.SimpleSearchMode;

/**
 * @ClassName TmMatchMode
 * @Description TODO
 * @Date 2024/5/30 18:29
 * @Author ly
 **/
public class RtmMatchMode extends AbstractMatchMode{

    @Override
    protected void handleMatchReqVo(MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService) {
        matchingReqVo.setIds(null);
    }

    @Override
    protected SimpleSearchMode getMode() {
        return SimpleSearchMode.RTM;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

被⽹络罪犯利⽤的5⼤ChatGPT越狱提⽰

⾃ChatGPT发布的近18个月以来&#xff0c;⽹络罪犯们已经能够利⽤⽣成式AI进⾏攻击。OpenAI在其内容政策中制定了限制措施&#xff0c;以阻⽌⽣成恶意内容。作为回应&#xff0c;攻击者们创建了⾃⼰的⽣成式AI平台&#xff0c;如 WormGPT和FraudGPT&#xff0c;并且他们还分享了…

Ubuntu22.04上Docker的安装

1. 使用APT安装 首先安装HTTPS传输的软件包和CA证书&#xff0c;确保软件下载过程中不被篡改。 sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y然后&#xff0c;使用国内源&#xff0c;并添加软件源的 GPG 密钥以防…

删除keil!VSvode+eide+jlink(stlink)配置keil工程,调试使用cortex-debug+openocd

文章目录 目的前期准备1.软件安装2.VScode安装3.VScode插件安装4.安装ARM-GCC交叉编译器 工程导入程序编译jlink在线调试部分常见问题更改为GCC 编译器更改为stlinkopencd一些tips调试变量查看构建器选项配置 目的 提示&#xff1a;这里可以添加技术概要 vscode代替keil进行程…

Ozon、美客多补单测评黑科技:打造无懈可击的自养号补单环境

不管哪个跨境平台的风控都会做升级&#xff0c;相对的补单技术也需要进行相应的做升级&#xff0c;风控升级后&#xff0c;自己养号补单需要注意以下技术问题&#xff0c;以确保补单的稳定性和安全性&#xff1a; 一、物理环境 1. 硬件参数伪装&#xff1a;平台已经开始通过I…

择校秘籍:如何找到口碑爆棚的学校?以星贝育园为例

在为孩子选择学校时&#xff0c;家长们总是慎之又慎&#xff0c;希望能找到一所口碑好、教育质量高的学校&#xff0c;为孩子的未来奠定坚实的基础。今天&#xff0c;我们就以星贝育园为例&#xff0c;来探讨一下如何选择口碑好的学校。 一、考察师资力量 优秀的教师团队是一所…

什么是定时器?

前言&#x1f440;~ 上一章我们介绍了阻塞队列以及生产者消息模式&#xff0c;今天我们来讲讲定时器 定时器 标准库中的定时器 schedule()方法 扫描线程 手动实现定时器 任务类 存储任务的数据结构 定时器类 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&am…

帮找Java Bug,面试,项目,解决Java问题

本人是个Java老程序员&#xff0c;如果你有解决不了的问题&#xff0c;或者面试的时候需要人帮助&#xff0c;或者求职就业上任何问题都可以联系我&#xff0c;下面是我微信&#xff0c;欢迎联系我&#xff01;

【JUC】可重入锁理解

可重入锁&#xff08;Reentrant Lock&#xff09;&#xff0c;也称作递归锁&#xff0c;是一种特殊的锁机制&#xff0c;它允许同一个线程多次获取同一个锁。 优点是可以避免死锁。 public class WhatReentrant {public static void main(String[] args) {new Thread(new Runn…

Qt——升级系列(Level Eight):界面优化

目录 QSS 背景介绍 基本语法 QSS设置方式 指定控件样式设置 全局样式设置 从文件加载样式表 使用Qt Designer 编辑样式 选择器 选择器概况 子控件选择器 伪类选择器 样式属性 盒模型 控件样式示例 按钮 复选框、单选框 输入框 列表 菜单栏 登录界面 绘图 基本概念 绘制各种形…

【Kali-linux for WSL】图形化界面安装

文章目录 前言图形化界面安装 前言 之前在WSL中安装了Kali 启动之后发现什么都没有&#xff01;&#xff01;&#xff01; 那我还怎么学习渗透技术&#xff1f;&#xff1f;&#xff1f; 看来&#xff0c;得改进下我的kali-linux for wsl&#xff0c;安装个图形化界面 图形化…

Jetson系列机载电脑创建热点模式配置方法

Jetson nano为例—— 创建热点模式配置方法 1.1、新建一个 WiFi 在屏幕右上角找到网络图标&#xff0c;点击后选择“Edit Connections”选项&#xff0c;进入选择网络连接页面&#xff0c;然后点击左下角加号&#xff0c;新建一个连接&#xff0c;类型选择 WiFi 后点击 “cre…

AI降重,不再难:降AI率的实用技巧大揭秘

如何有效降低AIGC论文的重复率&#xff0c;也就是我们说的aigc如何降重&#xff1f;AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文&#xff0c;就一定要在交稿之前做一下AIGC降重的检查。一般来说&#xff0c;如果论文的AIGC超过30%&#xff0c;很可能会被判定…

剪画小程序:如何将视频变成自己的作品!在手机上这样做就可以了!

亲爱的小伙伴们&#xff0c;我是你们的博主小画&#xff01; 今天和大家分享两个在视频剪辑中实用的技巧—旋转视频和添加水印&#xff01; 在我们的创作过程中&#xff0c;有时候常规的视角并不能完全展现出视频的魅力和创意。而通过旋转视频&#xff0c;就能为观众带来全新的…

【云原生监控】Prometheus 普罗米修斯从搭建到使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…

新规则!2024年信息素养大赛复赛图形化编程题这么写系统才能通过

2024年全国青少年信息素养大赛复赛即将在7月6日陆续开赛&#xff0c;今年Scratch图形化编程小低组和小高组分别为6道编程题&#xff0c;将采用新的判题规则&#xff0c;类似GESP的OJ系统判题&#xff0c;主要有以下三个方面&#xff1a; 1、变量名大小写要和题目完全一致。 2…

数据万象推出智能检索MetaInsight,现已开启限时公测

海量文件的分析统计一直是对象存储COS的热点需求&#xff0c;伴随AIGC飞速迭代发展&#xff0c;在众多不同模态素材的海洋中&#xff0c;用户也急需更高效地管理和利用多媒体内容&#xff0c;打破传统搜索的桎梏。 数据万象推出的智能检索 MetaInsight 服务将多模态检索与元数…

开源之夏|祝贺MatrixOne开源社区项目中选同学!

在本届「开源之夏 2024」活动中&#xff0c;MatrixOne开源社区共计上线3个项目任务&#xff0c;最终有 3位同学成功突围。接下来让我们看看每个项目的详细中选情况&#xff1a; 中选学生公示 项目名称&#xff1a;基于大语言模型的操作系统任务自动识别&#xff0c;拆解&#…

Unicode 和 UTF-8 以及它们之间的关系

通俗易懂的 Unicode 和 UTF-8 解释 Unicode 是什么&#xff1f; 想象一下&#xff0c;我们有一个巨大的图书馆&#xff0c;这个图书馆里有各种各样的书&#xff0c;每本书都有一个唯一的编号。Unicode 就像是这个图书馆的目录系统&#xff0c;它给世界上所有的字符&#xff0…

数据要素如何转化为生产力?关键在以指标为中心实现数据分析“快全准省”

进入到数字化时代&#xff0c;企业的经营变得越来越精细化、智能化、自动化&#xff0c;其中&#xff0c;数据就变成了关键要素&#xff0c;在企业的业务运营、经营决策、流程改进、创新驱动、资源配置等方面发挥出巨大作用。 数据具体如何转化为生产力&#xff0c;有几个关键…

俄罗斯ozon运费计算工具,跨境电商ozon物流运费计算工具

OZON平台服装类目卖家而言&#xff0c;如何快速、准确地为产品定价&#xff0c;并有效管理运费成本&#xff0c;直接关系到市场竞争力与利润空间。接下来我们看看俄罗斯ozon运费计算工具&#xff0c;跨境电商ozon物流运费计算工具。 萌啦Ozon定价工具&#xff1a;智能模拟&…
最新文章