策略模式java

2023-10-18  本文已影响0人  Yluozi

定义一个抽象接口,下面由多个子类继承,并将所有子类注入一个方法连通器,通过传入的参数去执行指定策略子类接口。

创建抽象接口


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),"");
                   
上一篇 下一篇

猜你喜欢

热点阅读