一、接口类

案例:

/**
 * 接口策略
 */
public interface DataServeStrategy {
    Map<String,Object> getData(Api api, String testNo, HttpServletRequest request, HttpServletResponse response);
}

二、接口实现类

案例1

@Component("ORCHESTRATION")
public class GetOrchestrationData implements DataServeStrategy {
    @Override
    public Map<String, Object> getData(Api api, String testNo, HttpServletRequest request, HttpServletResponse response) {
        Map<String,Object> result = new HashMap<>(Collections.emptyMap());
      	//业务逻辑
        return result;
    }
}

案例2

@Component("VIDEO")
public class GetVideoData implements DataServeStrategy {
    @Resource
    private VideoDataService videoDataService;

    @Override
    public Map<String, Object> getData(Api api, String testNo, HttpServletRequest request, HttpServletResponse response) {
        Map<String,Object> result = new HashMap<>(Collections.emptyMap());
        //处理过程
        return result;
    }
}


三、上下文控制(重点)

@Service
public class DataServeContext {

    private final Map<String, DataServeStrategy> orderStrategyMap = new ConcurrentHashMap<>();

    public DataServeContext(Map<String, DataServeStrategy> strategyMap) {
        this.orderStrategyMap.putAll(strategyMap);
    }

    public DataServeStrategy getResource(String  type){
        return orderStrategyMap.get(type);
    }
}

四、业务调用

/**
     * api.getServiceType() 对应@Component("ORCHESTRATION") 中的ORCHESTRATION
     * getData 为对应的实际方法
     * stringObjectMap 返回结果
     */
    DataServeStrategy dataServeStrategy = dataServeContext.getResource(api.getServiceType());
    Map<String, Object> stringObjectMap = dataServeStrategy.getData(api, testNo, request, response);