告别if else的在项目中的使用,一种优雅可扩展的写法

一个工厂类

   /**
     * @yzy
     */
    @Component
    public class DispatchCtx {
    @Autowired
    private StrategyFactory strategyFactory;

    /**
     * @des 获取返回的业务实例
     * @param memberQuery
     * @param <T>
     * @return
     */
    public <T> T getDate(MemberQuery memberQuery){
        if(Objects.isNull(memberQuery)){
            throw  new RuntimeException("上下文对象为空");
        }
        Istrategy strategy = strategyFactory.getStrategy(memberQuery.getId());
        return strategy.getData(memberQuery);
    }

策略中心:
使用的时Spring自带的注入Map中自动注入实现Istrategy的接口(详细可以学习下spring源码知识)

@Component
public class StrategyFactory {

    @Autowired
    private Map<String, Istrategy> strategy=new ConcurrentHashMap<String, Istrategy>();

    /**
     * @des 适配配置接口
     * @param graphId
     * @return
     */
    public  Istrategy getStrategy(String graphId){
        Istrategy istrategy = strategy.get(graphId);
        if(istrategy==null){
            throw  new RuntimeException(String.valueOf(MemberStatusEnum.MEMBER_ERROR.getCode()));
        }
        return istrategy;
    }

接口:

public interface Istrategy {

    public <T> T getData(MemberQuery memberQuery);
}

接口实现:

@Service(value = "price")
public class PriceServiceImpl implements Istrategy {
    @Override
    public MemberQuery getData(MemberQuery memberQuery) {
     
        return new MemberQuery ();
    }
}

业务实现:
在控制层 调用接口通过传入接口service注入的名称(如price或你定义的其他名称)f放入到对象ID属性中,即可实现策略的动态切换,当新增业务需求时实现Istrategy接口即可,不需要对原有的代码进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值