利用jdk8函數(shù)式接口和map實現(xiàn)策略模式,簡化if分支過多問題

第一步:在類上加入@AllArgsConstructor

import lombok.AllArgsConstructor;

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

第二步: 給類創(chuàng)建一個私有map(相當(dāng)于if分支)

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

第三步:各類創(chuàng)建一個無參init方法,標(biāo)注@PostConstruct

/**
     * 初始化(策略模式相關(guān)操作)
     */
    @PostConstruct
    public void init() {
        //插入冷藏箱數(shù)據(jù)
        topicStrategyMap.put(MqttEnum.COLD_DEVICE_TYPE.getValue(), topicStrategyMapDto -> {
            ColdData coldData = JSONUtil.toBean(topicStrategyMapDto.getDataJson(), ColdData.class);
            coldData.setAlarmType(topicStrategyMapDto.getAlarmType());
            return dataUploadService.insertOneColdData(coldData);
        });
        //插入液氮罐數(shù)據(jù)
        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());
    }

第四步:在業(yè)務(wù)中調(diào)用

  Function<TopicStrategyMapDto, Boolean> insertResult = topicStrategyMap.get(dataType);
                if (ObjectUtil.isNull(insertResult)) {
                    log.info("來自主題{}的數(shù)據(jù)插入失敗,原因:topicStrategyMap為null,添加失敗的數(shù)據(jù)為:{}", topic, dataJson);
                }

                if (insertResult.apply(TopicStrategyMapDto.builder().dataJson(dataJson).alarmType(Integer.valueOf(alarmType)).build())) {
                    log.info("來自主題{}的數(shù)據(jù),添加成功!添加的數(shù)據(jù)為:{}", topic, dataJson);
                } else {
                    log.info("來自主題{}的數(shù)據(jù),添加失敗! 添加失敗的數(shù)據(jù)為:{}", topic, dataJson);
                }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容