java根据不同类型跳转相应的实现类

1 不同实现类字典

@AllArgsConstructor
@Getter
public enum SendMessageEnum {

    HUAWEI("AndHWPush"),
    JIGUANG("AndJPush"),
    MEIZU("AndMZPush"),
    OPPO("AndOppoPush"),
    XIAOMI("AndXMPush"),
    XINGE("AndXinGePush"),
    ;

    private String type;

    /**
     * 匹配
     */
    public static SendMessageEnum explain(String type) {
        for (SendMessageEnum sendMessageEnum : SendMessageEnum.values()) {
            if (sendMessageEnum.getType().equals(type)) {
                return sendMessageEnum;
            }
        }
        return null;
    }
}

 

1          // sendMessage 实现类对象service 调用推送方法

    /**
     * 捕获的异常属于对接推送渠道的异常信息
     */
    @Override
    public void channelPush(NotificationBO notificationBO, ChannelDO channelDO, PushClientDO pushClientDO, List <String> aliasList) {
        String pushConf = pushClientDO.getPushConf();
        JSONObject jsonObject = JSONObject.parseObject(pushConf);
        PushConfigInfo pushConfigInfo = JSON.toJavaObject(jsonObject, PushConfigInfo.class);
        if (pushConfigInfo == null) {
            return ;
        }
        pushConfigInfo.setNoticePush(true);
        //获取不同的实现类对象
        SendMessageEnum sendMessageEnum = SendMessageEnum.explain(pushClientDO.getPushClient());
        try {
            SendMessageService sendMessage = sendMessageFactory.getSendMessage(sendMessageEnum);
            // sendMessage 实现类对象service 调用推送方法
            ThreadPoolUtil.getInstance().synChannelPush(sendMessage, channelDO, pushConfigInfo, notificationBO, aliasList);
            channelDO.setLastMsg(notificationBO.getPushMessage());
        } catch (Exception e) {
            log.error("[FAIL]Push Exception information : {}", e.getMessage());
        }
    }

2 通过工厂获取service 对象 

@Component
public class SendMessageFactory {

    @Autowired
    private List <SendMessageService> sendMessageServices;

    public SendMessageService getSendMessage(SendMessageEnum sendMessageEnum){
        for (SendMessageService sendMessageService : sendMessageServices) {
            // 通过support判断是哪一个实现类
            if (sendMessageService.support(sendMessageEnum)) {
                return sendMessageService;
            }
        }
        throw new UnsupportedOperationException("unsupported request: " + sendMessageEnum);
    }
}



@Slf4j
@Component(value = "hWSendNotifyMessage")
public class HwSendNotifyMessage implements SendMessageService {
    // 通过support判断是哪一个实现类
    @Override
    public boolean support(SendMessageEnum sendMessageEnum) {
        return sendMessageEnum == SendMessageEnum.HUAWEI;
    }
}

// 发送简写了自己补全下 
    @Override
    public boolean send(SendMessageEnum sendMessageEnum) {
        return sendMessageEnum == SendMessageEnum.HUAWEI;
    }

    public void synChannelPush(SendMessageService sendMessage,ChannelDO channelDO,PushConfigInfo pushConfigInfo,NotificationBO notificationBO, List <String> aliasList){
        CompletableFuture <String> future = CompletableFuture.supplyAsync(new Supplier <String>() {
            @Override
            public String get() {
                try{
                    sendMessage.send(channelDO,pushConfigInfo,notificationBO,aliasList);
                    return "task finally channelDO : " + channelDO;
                } catch (Exception e){
                    log.error("[FAIL]Push Exception information : {}",e.getMessage());
                    e.printStackTrace();
                }
                return "[fail] push Exception channelDO : " + channelDO.toString();
            }

        }, pool);
        //lambada的实现方式
        future.thenAccept(e -> log.info("推送结果" + e));

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值