关于通过入参,省略if,调用接口实现不同的类

如果一个接口实现了不同的类,如何做到自动化配置的问题

未自动配置的方式如下

/**
     * 通过判断入参,确定调用哪个实现类
     * @param param
     * @return
     */
    @GetMapping("aa")
    public String aa(Integer param){
        if(param.equals(1)){
            tigerService.run("老虎");
        }
        if(param.equals(2)){
            lionService.run("狮子");
        }
        return "";
    }

缺点:可优化,多了if不够简洁

思路:

可以做个配置类,把参数和实现类绑在一起,通过调用接口,找到实现此接口对应的实现类,用以

实现自动配置查找

①新增配置类(入参与实现类之间)

/**
 * @author huyujie
 * @date 2023/7/7 10:05
 */
@Component
public class AutoConfig {

    public static Map<Integer, Class<? extends IRunService>> TYPE_CONFIG = MapUtil
            .builder(new HashMap<Integer, Class<? extends IRunService>>())
            .put(1, TigerServiceImpl.class)
            .put(2, LionServiceImpl.class)
            .build();

}

②调用接口(通过调用接口,以实现调用不同的类方法)

/**
     * 通过判断入参,确定调用哪个实现类
     *
     * @param param
     * @return
     */
    public String aa(Integer param) {
        try {
            Class<? extends IRunService> implClass = AutoConfig.TYPE_CONFIG.get(param);
            //查库,获取入参,假设查库完毕
            String result = "666";
            implClass.newInstance().run(result);

            //也可采取此种方式调用
            // IRunService iRunService = SpringUtil.getBean(implClass);
            //iRunService.run(result);

        } catch (Exception e) {
            log.error("未配置实现类:{}", e.getMessage());
            e.printStackTrace();
        }
        return "";
    }

③实现类内部编写

/**
 * 狮子实现类
 *
 * @author huyujie
 * @date 2023/7/7 9:47
 */
@Service
@Slf4j
public class LionServiceImpl implements IRunService {
    @Override
    public String run(String param) {
        return param + "狮子";
    }
}
/**
 * 老虎实现类
 *
 * @author huyujie
 * @date 2023/7/7 9:45
 */
@Service
@Slf4j
public class TigerServiceImpl implements IRunService {

    @Override
    public String run(String param) {
        return param + "跑步";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值