if-else过多,使用策略模式(Strategy)解决if-else乱象

if else 应用乱象主要分为以下几点:

1.if else 过多
2.if else 嵌套过深
3.表达式过于复杂

会导致以下的问题:

1.可读性差

2.可扩展性差

从软件设计角度来看, 不符合单一职责原则, 也不符合开闭原则; 由于需求千变万化, 所以提高扩展性非常重要;

今天我将使用策略设计模式(基于spring)解决if-else乱象的问题。
在这里插入图片描述
可以看出,实现策略模式分为两个重要的步骤:
第一:传入选择某种具体策略的标识;
第二:将所有的策略单独封装
第三:根据传入的标识,选择具体策略

在spring中, 我们可以将所有的策略实现类交给spring来管理;

案例:政法平台解析数据包在不同的地区使用不同的解析模式: 云南-云南模式;四川-四川模式;江苏-江苏模式等。
第一步:定义立案策略接口

public interface ZfptStrategyService {
    //政法平台模式(标识)
    String getZfptms();

    //具体的策略算法(业务处理): xml解析
    String parse(String path);
}

第二步:编写实现类, 以江苏四川为例:

@Service
public class JszfStrategyService implements ZfptStrategyService{
    private static final String zfptms = "jsms";

    @Override
    public String getZfptms() {
        return zfptms;
    }

    @Override
    public String parse(String path) {
        //具体业务处理
        System.out.println("江苏政法模式================");
        return null;
    }
}
@Service
public class SczfStrategyService implements ZfptStrategyService{
    private static final String zfptms = "scms";

    //这里指定与当前策略相匹配的标识;
    @Override
    public String getZfptms() {
        return zfptms;
    }

    @Override
    public String parse(String path) {
        //具体业务处理
        System.out.println("四川政法模式================");
        return null;
    }
}

第三步:编写策略工厂类,方法实现如下:

@Component
public class ZfptStrategyFactory implements InitializingBean {
    //将之前所有的策略实现类注入;
    @Autowired
    List<ZfptStrategyService> zfptStrategyServices;

    private static Map<String, ZfptStrategyService> zfptStrategyServiceMap = new HashMap<>();

    //spring bean初始化时收集所有策略实现类的策略标识,组成策略标识->策略实现的映射
    @Override
    public void afterPropertiesSet() {
        zfptStrategyServices.stream().forEach(zfptStrategyService -> {
            zfptStrategyServiceMap.put(zfptStrategyService.getZfptms(), zfptStrategyService);
        });
        System.out.println("策略组装完成---------》" + zfptStrategyServiceMap);
    }

    public static ZfptStrategyService getZfptService(String zfptms){
        return zfptStrategyServiceMap.get(zfptms);
    }
}

在这里插入图片描述
这样就实现了映射关系。

最后根据政法平台模式,执行具体的策略。

ZfptStrategyFactory.getZfptService(zfptms).parse("");

总结:通过策略模式,以后我们再新增新的政法平台模式时,不再需要改以前的代码,只需要继承ZfptStrategyService即可,不仅增强了代码的可扩展性,而且代码简捷宜读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值