定义一个抽象接口,下面由多个子类继承,并将所有子类注入一个方法连通器,通过传入的参数去执行指定策略子类接口。
创建抽象接口
public abstract class TStrategy {
/**
* 支持的种类
* @return
*/
public abstract String supportedType();
/**
* 调用方法
* */
public abstract String callMethod(String entity,String className1);
}
创建的具体实现子类
@Component
@Slf4j
public class CutStrategy extends TStrategy{
@Autowired
TController tController;
@Override
public String supportedType() {
// 调用type抽象方法的type
return "PonEntity";
}
@Override
public String callMethod(String entityStr,String className1) {
Gson gson = new Gson();
PonEntity entity = gson.fromJson(entityStr,PonEntity.class);
try {
} catch (Exception e) {
log.error("错误:"+e.getMessage());
e.printStackTrace();
}
return gson.toJson(entity);
}
}
策略调用入口
@Component
public class TContext {
// 这里使用到了Spring的自动注入,将所有子类注入进来
@Autowired
private List<TStrategy> tStrategies;
// 不同的工种自己进行不同的逻辑
public String productionT(String type, String data,String classname1) {
return this.getStrategy(type).callMethod(data,classname1);
}
// 根据type的不同来获取到不同的工种子类
private TStrategy getStrategy(String type) {
return this.tStrategies
.stream()
.filter(TStrategy -> type.equals(TStrategy.supportedType()))
.findFirst()
.get();
}
}
调用方法
@Autowired
private TContext context;
...
String str = context.productionT("PonEntity",new Gson().toJson(PreEntity),"");