重构_使用设计模式替代多重判断

Posted 大数据江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重构_使用设计模式替代多重判断相关的知识,希望对你有一定的参考价值。



开发中常常会遇到多重 if 判断的问题,多重判断不仅使代码显得臃肿,而且也是无法支持开闭原则的,复杂的判断会大大降低代码的可读性。


下面是使用 策略模式 + 工厂模式 替代多重判断的小 Demo。


1.先写一个策略接口,后面所有策略要实现这个接口


/** * 策略接口 * @author fan * */public interface Strategy {    //执行的方法,由于java中方法的执行,对象会根据具体类型执行对应子类的方法,所以实际实现中会执行对应子类的方法(自认为这个原理是策略模式的根本)    public void operate();}


2.编写具体策略类,具体策略中实现接口的方法,写出具体策略方案


/** * 策略A * @author fan * */public class StrategyA implements Strategy{
    public void operate() {        System.out.println("如若是A情况,执行此方法。。。。");    }}/** * 策略B * @author fan * */public class StrategyB implements Strategy {
    @Override    public void operate() {        System.out.println("如若是B情况,执行此方法。。。。");    }
}


3.准备一个枚举类,保存具体策略类类型


/** * 策略枚举(增加新策略时需要添加数据) * @author fan */public enum StatusEnum {
    StrateryA("study.strategy.StrategyA"),    StrateryB("study.strategy.StrategyB");        String value = "";        private StatusEnum(String value){        this.value = value;    }        public String getvalue(){        return this.value;    }}


4.创建工厂方法,创建具体策略类


/** * 生成具体策略工厂方法 * @author fan * */public class StrategyFactory {
    public static Strategy getStrategy(StatusEnum status){            Strategy strategy = null;                try {            strategy = (Strategy) Class.forName(status.getvalue()).newInstance();        } catch (Exception e) {            e.printStackTrace();                        System.out.println("生成策略出错");        }                 return strategy;    }}


5.对策略执行进行封装,以便不影响业务逻辑的处理,实现与业务逻辑的分离,降低代码耦合度


/** * 封装执行的操作 * @author fan * */public class StrategyFacade {
    /**     * 实际执行的策略     * @param number     * @return     */    public static boolean doOperate(int number){                Strategy strategy = StrategyFactory.getStrategy(getStrategyType(number));        strategy.operate();                return true;    }    /**     * 根据烈性条件生成不同的策略(使用策略场景变化是需要修改)     * @param number     * @return     */    private static StatusEnum getStrategyType(int number){                if(number > 10){            return StatusEnum.StrateryB;        }else{            return StatusEnum.StrateryA;        }            }    }


6. 测试


/** * 策略模式+工厂模式 * @author fan * @version 1.0   使用策略发生变化时,需要修改1.封装策略类的具体声测策略方法 2.策略枚举类 增加新的策略 3.创建新的策略类并实现其具体方法 */public class StrategyTest {
    public static void main(String[] args) {
        int number = 10;        //业务模块就一行代码搞定了,即使策略变化,或者使用策略的具体方案变了,我们只要修改策略代码就好了,业务代码不需要变化
        StrategyFacade.doOperate(number);    }
}


测试结果为 : number 为10 所以执行A策略


本文完。


原文链接:

https://blog.csdn.net/kai763253075/article/details/52496741



遇见就是缘分,关注一下,我写的就更来劲儿啦 




以上是关于重构_使用设计模式替代多重判断的主要内容,如果未能解决你的问题,请参考以下文章

扎实基础_设计模式_行为型_观察者模式(项目实战,使用委托注册事情,消除多重判断)

重构_使用模板模式替代重复业务操作

经典设计模式之策略模式如何重构聚合支付平台,对接支付宝,微信,银联支付

重构以避免在使用抽象类而不是接口时进行多重继承

我的Java优化规范总结

Java重构-策略模式状态模式卫语句