策略模式以及策略热插拔的具体实现
//策略接口
public interface ModelStrategy {
String getModelName();
String invokeApi(String params);
}
//具体策略类1
public class ModelA implements ModelStrategy {
@Override
public String getModelName() {
return "ModelA";
}
@Override
public String invokeApi(String params) {
//调用模型A的API
return "Result from ModelA: " + params;
}
}
//具体策略类2
public class ModelB implements ModelStrategy {
@Override
public String getModelName() {
return "ModelB";
}
@Override
public String invokeApi(String params) {
//调用模型B的API
return "Result from ModelB: " + params;
}
}
//上下文类
public class ModelContext {
private ModelStrategy modelStrategy;
public ModelContext(ModelStrategy modelStrategy) {
this.modelStrategy = modelStrategy;
}
public void setModelStrategy(ModelStrategy modelStrategy) {
this.modelStrategy = modelStrategy;
}
public String invokeModelApi(String params) {
return modelStrategy.invokeApi(params);
}
}
//策略管理器
public class ModelStrategyManager {
private static Map<String, ModelStrategy> strategyMap = new HashMap<>();
public static void registerStrategy(String modelName, ModelStrategy strategy) {
strategyMap.put(modelName, strategy);
}
public static ModelStrategy getStrategy(String modelName) {
return strategyMap.get(modelName);
}
}
//客户端代码
public class Client {
public static void main(String[] args) {
ModelStrategyManager.registerStrategy("ModelA", new ModelA());
ModelStrategyManager.registerStrategy("ModelB", new ModelB());
ModelContext context = new ModelContext(ModelStrategyManager.getStrategy("ModelA"));
System.out.println(context.invokeModelApi("Test params"));
context.setModelStrategy(ModelStrategyManager.getStrategy("ModelB"));
System.out.println(context.invokeModelApi("Test params"));
}
}

浙公网安备 33010602011771号