利用jdk8函数式接口和map实现策略模式,简化if分支过多问题

第一步:在类上加入@AllArgsConstructor

import lombok.AllArgsConstructor;

@Slf4j
@Configuration
//@RequiredArgsConstructor
@AllArgsConstructor
public class MqttServer {

第二步: 给类创建一个私有map(相当于if分支)

private Map<String, Function<TopicStrategyMapDto, Boolean>> topicStrategyMap;

第三步:各类创建一个无参init方法,标注@PostConstruct

/**
     * 初始化(策略模式相关操作)
     */
    @PostConstruct
    public void init() {
        //插入冷藏箱数据
        topicStrategyMap.put(MqttEnum.COLD_DEVICE_TYPE.getValue(), topicStrategyMapDto -> {
            ColdData coldData = JSONUtil.toBean(topicStrategyMapDto.getDataJson(), ColdData.class);
            coldData.setAlarmType(topicStrategyMapDto.getAlarmType());
            return dataUploadService.insertOneColdData(coldData);
        });
        //插入液氮罐数据
        topicStrategyMap.put(MqttEnum.INPTANK_DEVICE_TYPE.getValue(), topicStrategyMapDto -> {
            InptankData inptankData = JSONUtil.toBean(topicStrategyMapDto.getDataJson(), InptankData.class);
            inptankData.setAlarmType(topicStrategyMapDto.getAlarmType());
            return dataUploadService.insertOneInptankData(inptankData);
        });
        //插入超低温冰箱
        topicStrategyMap.put(MqttEnum.ULTRA_COLD_DEVICE_TYPE.getValue(), topicStrategyMapDto -> {
            UltraColdData ultraColdData = JSONUtil.toBean(topicStrategyMapDto.getDataJson(), UltraColdData.class);
            ultraColdData.setAlarmType(topicStrategyMapDto.getAlarmType());
            return dataUploadService.insertOneUltraColdData(ultraColdData);
        });

        log.info(mqttConfig.toString());
    }

第四步:在业务中调用

  Function<TopicStrategyMapDto, Boolean> insertResult = topicStrategyMap.get(dataType);
                if (ObjectUtil.isNull(insertResult)) {
                    log.info("来自主题{}的数据插入失败,原因:topicStrategyMap为null,添加失败的数据为:{}", topic, dataJson);
                }

                if (insertResult.apply(TopicStrategyMapDto.builder().dataJson(dataJson).alarmType(Integer.valueOf(alarmType)).build())) {
                    log.info("来自主题{}的数据,添加成功!添加的数据为:{}", topic, dataJson);
                } else {
                    log.info("来自主题{}的数据,添加失败! 添加失败的数据为:{}", topic, dataJson);
                }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容