有效的减小代码中太多的if、else?-策略模式

       写这篇文章的目的和上一篇单例模式同样,策略模式也是一种经常使用的设计模式,太多的if-else不只看着不太美观并且很差维护,对于本身来讲也等于复习了一遍策略模式。先说一下策略java

模式的定义:算法

       策略模式封装了算法家族,可让彼此之间互相替换,简单的来讲就是好比以前系统调用了两个数据源,如今要添加第三个数据源若是仍是使用if-else就须要给全部调用数据源的地方加上设计模式

新的判断分支,从而致使维护繁琐。如如下代码:单元测试

if(A){
     System.out.println("调用A数据源");
}else if(B){
     System.out.println("调用B数据源");
}

     若是未来随着业务变得复杂,加入C数据源,还要接着加入else if分支,以此类推工做量会愈来愈繁琐,并且加入了大量冗余代码。。。。测试

     使用了策略模式以后:只须要在策略类Strategy中定义一个调用全部数据源的公共借口就能够this

public abstract class Strategy {spa

    public abstract void dataInterface();
}设计

     DataStrategyA,封装了调用A数据源的方法,继承于Strategy3d

public class DataStrategyA extends Strategy {

    public void dataInterface() {
        System.out.println("调用A数据源");
    }

}

    DataStrategyB,封装了调用B数据源的方法,继承于Strategycode

public class DataStrategyB extends Strategy {

    public void dataInterface() {
         System.out.println("调用B数据源");
    }

}

    Context算法调用类,根据具体策略对象调用相应的方法

public class Context {

    private Strategy strategy;
    
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public void contextInterface() {
        strategy.dataInterface();
    }
}

     运行效果以下:

public class Test {

    public static void main(String[] args) {
        Context context = new Context(new DataStrategyB());
        context.contextInterface();

    }

}

      这样就解决了繁琐的if-else操做了,就算之后加入C、D数据源也只须要增长两个策略类就能够了

      此外,策略模式还有一个优势就是简化了单元测试,每一个方法都有本身独立的类,能够经过本身的接口进行单独测试

     固然策略模式也存在着缺点,就是增长了大量的策略类,要求每一个开发人员都要了解。策略模式的优势、缺点都说完了怎么样取舍就看你们本身了。不过仍是建议你们

使用策略模式。阿里巴巴的java开发手册中也明确表示了if层数超过三层的时候要使用策略模式,

相关文章
相关标签/搜索