package com.example.mina.client.base; import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class AbstractExperimentFactory> { abstract public boolean isSupport(ExperimentOptions options); protected abstract Class getClazz(); protected abstract ExperimentType getExperimentType(); public ExperimentProgressListner getListner() { //TODO 生成任务进度更新监听器 return null; } public T createExperiment(MatrixClient client, ExperimentOptions options) { if (isSupport(options)) { log.error("the experiment is not supported by the matrix! matrix id: " + client.getDeviceId()); throw new RuntimeException("the experiment is not supported by the matrix! matrix id: " + client.getDeviceId()); } try { T t = getClazz().getDeclaredConstructor().newInstance(); t.setClient(client); t.setOptions(options); t.setProgressListner(getListner()); return t; } catch (Exception e) { log.error("create a experiment task is failed, matrix id: " + client.getDeviceId()); throw new RuntimeException("create a experiment task is failed, matrix id: " + client.getDeviceId()); } } }