策略设计+工厂设计模式解决if-else过多案例

1 问题代码引入

/*
 * Copyright (C) 2022 Baidu, Inc. All Rights Reserved.
 */
package com.代码规范.IfElse的优化;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 质检规则类型枚举
 *
 * @author zhaoshuai11
 * @date 2022/10/10
 */
@AllArgsConstructor
@Getter
public enum QualityRuleTypeEnum {

    ALL_TYPE(0, "所有细则"),
    FIELD_FILL_TYPE(1, "字段填充度"),
    FIELD_REPEAT_TYPE(2, "字段重复度"),
    PICTURE_VISION_TYPE(3, "图片质量度"),
    TEXT_QUALITY_TYPE(4, "文本质量度");

    private Integer type;

    private String desc;

}

package com.代码规范.IfElse的优化;

import com.代码规范.IfElse的优化.impl.QualityScoreFactory;

public class IfElse {
    public static void main(String[] args) {
        Integer type = 3;
        Integer res = -1;
        if (type.equals(QualityRuleTypeEnum.ALL_TYPE.getType())) {
            res = allType();
        }
        if (type.equals(QualityRuleTypeEnum.FIELD_FILL_TYPE.getType())) {
            res = fieldFillType();
        }
        if (type.equals(QualityRuleTypeEnum.FIELD_REPEAT_TYPE.getType())) {
            res = fieldRepeatType();
        }
        if (type.equals(QualityRuleTypeEnum.PICTURE_VISION_TYPE.getType())) {
            res = pictureVisionType();
        }
        if (type.equals(QualityRuleTypeEnum.TEXT_QUALITY_TYPE.getType())) {
            res = textQualityType();
        }
        System.out.println(res);
    }

    public static Integer allType() {
        return QualityRuleTypeEnum.ALL_TYPE.getType();
    }
    public static Integer fieldFillType() {
        return QualityRuleTypeEnum.FIELD_FILL_TYPE.getType();
    }
    public static Integer fieldRepeatType() {
        return QualityRuleTypeEnum.FIELD_REPEAT_TYPE.getType();
    }
    public static Integer pictureVisionType() {
        return QualityRuleTypeEnum.PICTURE_VISION_TYPE.getType();
    }
    public static Integer textQualityType() {
        return QualityRuleTypeEnum.TEXT_QUALITY_TYPE.getType();
    }
}

2 问题解决

package com.代码规范.IfElse的优化;

public interface HandleFieldQualityScore {
    Integer setContentQualityDetail();
}

package com.代码规范.IfElse的优化.impl;

import com.代码规范.IfElse的优化.HandleFieldQualityScore;
import com.代码规范.IfElse的优化.QualityRuleTypeEnum;

public class AllTypeQualityScoreImpl implements HandleFieldQualityScore {
    @Override
    public Integer setContentQualityDetail() {
        return QualityRuleTypeEnum.ALL_TYPE.getType();
    }
}

package com.代码规范.IfElse的优化.impl;

import com.代码规范.IfElse的优化.HandleFieldQualityScore;
import com.代码规范.IfElse的优化.QualityRuleTypeEnum;

public class FieldFillTypeQualityScoreImpl implements HandleFieldQualityScore {
    @Override
    public Integer setContentQualityDetail() {
        return QualityRuleTypeEnum.FIELD_FILL_TYPE.getType();
    }
}

package com.代码规范.IfElse的优化.impl;

import com.代码规范.IfElse的优化.HandleFieldQualityScore;
import com.代码规范.IfElse的优化.QualityRuleTypeEnum;

public class FieldRepeatTypeQualityScoreImpl implements HandleFieldQualityScore {
    @Override
    public Integer setContentQualityDetail() {
        return QualityRuleTypeEnum.FIELD_REPEAT_TYPE.getType();
    }
}

package com.代码规范.IfElse的优化.impl;

import com.代码规范.IfElse的优化.HandleFieldQualityScore;
import com.代码规范.IfElse的优化.QualityRuleTypeEnum;

public class PictureVisionTypeQualityScoreImpl implements HandleFieldQualityScore {
    @Override
    public Integer setContentQualityDetail() {
        return QualityRuleTypeEnum.PICTURE_VISION_TYPE.getType();
    }
}

package com.代码规范.IfElse的优化.impl;

import com.代码规范.IfElse的优化.HandleFieldQualityScore;
import com.代码规范.IfElse的优化.QualityRuleTypeEnum;

public class TextQualityTypeQualityScoreImpl implements HandleFieldQualityScore {
    @Override
    public Integer setContentQualityDetail() {
        return QualityRuleTypeEnum.TEXT_QUALITY_TYPE.getType();
    }
}
package com.代码规范.IfElse的优化.impl;

import com.代码规范.IfElse的优化.HandleFieldQualityScore;
import com.代码规范.IfElse的优化.QualityRuleTypeEnum;
import org.apache.commons.collections4.map.HashedMap;

import java.util.Map;

public class QualityScoreFactory {
    private static final Map<Integer, HandleFieldQualityScore> map = new HashedMap<>();
    static {
        map.put(QualityRuleTypeEnum.ALL_TYPE.getType(), new AllTypeQualityScoreImpl());
        map.put(QualityRuleTypeEnum.FIELD_FILL_TYPE.getType(), new FieldFillTypeQualityScoreImpl());
        map.put(QualityRuleTypeEnum.FIELD_REPEAT_TYPE.getType(), new FieldRepeatTypeQualityScoreImpl());
        map.put(QualityRuleTypeEnum.PICTURE_VISION_TYPE.getType(), new PictureVisionTypeQualityScoreImpl());
        map.put(QualityRuleTypeEnum.TEXT_QUALITY_TYPE.getType(), new TextQualityTypeQualityScoreImpl());
    }
    public static HandleFieldQualityScore getHandleFieldQualityScore(Integer type) {
        return map.get(type);
    }
}
package com.代码规范.IfElse的优化;

import com.代码规范.IfElse的优化.impl.QualityScoreFactory;

public class IfElse {
    public static void main(String[] args) {
        Integer type = 3;
        Integer res = -1;
        HandleFieldQualityScore handleFieldQualityScore = QualityScoreFactory.getHandleFieldQualityScore(type);
        res = handleFieldQualityScore.setContentQualityDetail();
        System.out.println(res);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值