五、人脸识别starter-通道定义和实现

一、分析

	外部的完成之后就开始具体的通道了,首先通道是有多个的,所以要定义出一个接口,具体的通道实现这些接口,完成自己的内部处理。

二、接口的定义

	接口定义出三个方法
  • 创建订单
  • 查询订单
  • 获取通道类型
    代码如下
public interface PassProcessor {

  PassCreateOrderBo createOrder(String appId, String appKey, String orderNo, String name, String idNo, String callbackUrl);

  PassQueryOrderBo queryOrder(String appId, String appKey, String orderNo);

  PassType getPassType();

}

这里说明下第三个接口:获取通道类型,因为每个接口的实现就是一种通道的实现,如果不加这个接口,那么调用的人不知道是实现的哪个通道,所以要让实现类自己告诉调用者,我实现了哪个通道

三、接口的实现

  • 腾讯的实现
@Component
public class TencentProcessor implements PassProcessor {

  @Override
  public PassCreateOrderBo createOrder(String appId, String appKey, String orderNo, String name,
      String idNo, String callbackUrl) {
    return new PassCreateOrderBo(orderNo, "https://www.tencent.com");
  }

  @Override
  public PassQueryOrderBo queryOrder(String appId, String appKey, String orderNo) {
    return new PassQueryOrderBo(true, true);
  }

  @Override
  public PassType getPassType() {
    return PassType.TENCENT;
  }
}
  • 阿里的实现
@Component
public class AlibabaProcessor implements PassProcessor {

  @Override
  public PassCreateOrderBo createOrder(String appId, String appKey, String orderNo, String name,
      String idNo, String callbackUrl) {
    return new PassCreateOrderBo(orderNo, "https://www.alibaba.com");
  }

  @Override
  public PassQueryOrderBo queryOrder(String appId, String appKey, String orderNo) {
    return new PassQueryOrderBo(true, true);
  }

  @Override
  public PassType getPassType() {
    return PassType.ALIBABA;
  }
}

四、配置

	这些实现类怎么调用呢,这里用spring的Configuration的配置Bean来实现,代码如下
@Configuration
public class PassProcessorConfig {

  @Autowired
  private List<PassProcessor> passProcessorList;

  @Bean
  public Map<PassType, PassProcessor> passProcessorMap() {

    return passProcessorList.stream().collect(
        Collectors.toMap(key -> key.getPassType(), value -> value));

  }

}

把所有的实现类放到map里,通道类型作为key,通道的实现作为value

五、调用

	还在最外层的FaceRecognitionService调用,代码如下
@Component
public class FaceRecognitionService {

  @Autowired
  private PassInfoService passInfoService;
  @Autowired
  private Map<PassType, PassProcessor> passProcessorMap;

  /**
   * 创建订单
   * @param orderNo
   * @param passNo
   * @param name
   * @param idNo
   * @param callbackUrl
   * @return
   */
  public CreateOrderBo createOrder(String orderNo, String passNo, String name, String idNo, String callbackUrl) {
    PassInfo passInfo = passInfoService.getInfo(passNo);
    String appId = passInfo.getAppId();
    String appKey = passInfo.getAppKey();
    PassType passType = passInfo.getPassType();
    PassProcessor passProcessor = passProcessorMap.get(passType);
    PassCreateOrderBo passCreateOrderBo = passProcessor.createOrder(appId, appKey, orderNo, name, idNo,
        callbackUrl);
    return new CreateOrderBo(passCreateOrderBo.getOrderNo(), passCreateOrderBo.getH5Url());
  }

  /**
   * 查询订单
   * @param orderNo
   * @param passNo
   * @return
   */
  public QueryOrderBo queryOrder(String orderNo, String passNo) {
    PassInfo passInfo = passInfoService.getInfo(passNo);
    String appId = passInfo.getAppId();
    String appKey = passInfo.getAppKey();
    PassType passType = passInfo.getPassType();
    PassProcessor passProcessor = passProcessorMap.get(passType);
    PassQueryOrderBo passQueryOrderBo = passProcessor.queryOrder(appId, appKey, orderNo);
    return new QueryOrderBo(passQueryOrderBo.isPass(), passQueryOrderBo.isCharge());
  }

}

六、配置config类

在resources下MET-INF下的spring.factories加上config类的路径

# 自动装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.starter.example.config.PassProcessorConfig

七、项目的结构如下

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值