与枚举结合的策略模式

发布于:2024-07-08 ⋅ 阅读:(43) ⋅ 点赞:(0)

枚举类:

 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;
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到