Java-工厂模式[抽象类重写实现]

针对相同的业务流程中,个别不同的处理方式,可以通过工厂模式+抽象类+重写实现类的方式来降低代码量。

基于枚举获取工厂处理服务

@Component
public class ModelDataServiceFactory {
    private Map<ModelTypeEnum, ModelDataService> modelTypeMapDataService = new HashMap<>();

    @Autowired
    private List<AbstractModelDataServiceImpl> services;

    public ModelDataService modelType(ModelTypeEnum modelType) {
        if (Objects.isNull(modelType)) {
            throw new BusinessException("ModelDataServiceFactory modelType is null");
        }
        return modelTypeMapDataService.get(modelType);
    }

    @PostConstruct
    public void init() {
        services.forEach(service -> modelTypeMapDataService.put(service.getModelType(), service));
    }
}

接口和抽象类

public interface ModelDataService {
/**
 * 导入数据集数据
 *
 * @param experimentName 实验名称
 * @param dataSetType    数据集类型
 * @param modelTypeCode  模型类型code
 * @param dataUrls       数据url列表
 * @param experimentId   实验id
 * @return {@link DataSetCreateBO}
 */
DataSetCreateBO importData(Long experimentId,String experimentName, String dataSetType, String modelTypeCode, List<String> dataUrls);

/**
 * 导出实验运行结束后的模型数据
 *
 * @param experimentId     实验id
 * @param experimentTaskId 实验任务id, 可选值,如果为空则取最近一次成功的任务id
 * @param targetStepNum    目标步骤编号
 * @return {@link List}<{@link String}>
 */
List<String> exportData(Long experimentId,Long experimentTaskId,Integer targetStepNum);

/**
 * 检查模型输出数据
 *
 * @param experimentTaskId 实验任务id
 * @return {@link String} 模型生成的文件地址,字符串为json格式
 */
ModelOutputDataCheckResultBO checkOutputData(Long experimentTaskId);
}

抽象类

@Slf4j
public abstract class AbstractModelDataServiceImpl implements ModelDataService {
    public abstract ModelTypeEnum getModelType();

    @Override
    public ModelOutputDataCheckResultBO checkOutputData(Long experimentTaskId) {
        ModelOutputDataCheckResultBO checkResultBO = new ModelOutputDataCheckResultBO();
        checkResultBO.setIsOk(true);

        return checkResultBO;
    }

    @Override
    public DataSetCreateBO importData(Long experimentId,String experimentName,String dataSetType,String modelTypeCode, List<String> dataUrls) {
        DataSetCreateBO  dataSetCreateBO = this.createDataSet(dataSetType,experimentName);
        if (Objects.isNull(dataSetCreateBO)) {
            throw new BusinessException(CommonStatus.SYSTEM_ERROR_MSG,"data set is null");
        }
        this.importDataSetContent(dataSetCreateBO,modelTypeCode,dataUrls);
        return dataSetCreateBO;
    }

    @Override
    public List<String> exportData(Long experimentId, Long experimentTaskId,Integer targetStepNum) {
        Map<String,String> outputDatas = this.exportMapData(experimentId,experimentTaskId,targetStepNum);
        return parseModelOutputData(outputDatas,targetStepNum);
    }
}

 

实现类

@Slf4j
@Service
public class ModelDataOfClassifyServiceImpl extends AbstractModelDataServiceImpl {

    @Override
    public ModelTypeEnum getModelType() {
        return ModelTypeEnum.CLASSIFY;
    }

    /**
     *
     * @param experimentId   实验id
     * @param experimentName 实验名称
     * @param dataSetType    数据集类型
     * @param modelTypeCode  模型类型code
     * @param dataUrls       数据url列表
     * @return
     */
    @Override
    public DataSetCreateBO importData(Long experimentId, String experimentName, String dataSetType, String modelTypeCode, List<String> dataUrls) {
        xxx
        return null;
    }
   
}

调用类

@Autowired
private ModelDataServiceFactory modelDataServiceFactory;

ModelOutputDataCheckResultBO checkResultBO = modelDataServiceFactory.modelType(ModelTypeEnum.getEnumByDefName(experiment.getModelTypeCode())).checkOutputData(experimentTask.getId());

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值