设计模式—策略模式

定义提起if else,我们肯定很熟悉,但当我们大量使用if else时,是否会想到这其中会产生的问题?当大量代码放进if else里时,我们的整个代码片段将

定义

  提起if else,我们肯定很熟悉,但当我们大量使用if else时,是否会想到这其中会产生的问题?

  当大量代码放进if else里时,我们的整个代码片段将会非常大。符合了if的某个条件时,某段代码才会被调用,其它代码此时就成了无用代码,造成了空间浪费,且不易维护。

  此时策略模式就可以发挥它的作用了!

  策略模式就是对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。

  这里的不同的场景对应if else 里面的各种条件,不同的实现算法对应if else里面的具体实现算法。

 

如何使用策略模式

  让我们看一段if else代码:

  

  很典型的一段代码,实现了根据不同的地区采用不同的计税算法。如果需求变更,要多加一个国家的计税算法,怎么办呢?

  很自然的,我们会在枚举那多加一个变量,然后再CalculateTax()中加一段else if。

  但是,如果我们这么改就会违背了开发封闭设计原则,我们应该进行拓展,而不是修改源代码!

  使用了策略模式后:

  

  

  我们先建一个抽象类:TaxStrategy,里面有一个虚函数Caculate(...),这个函数在子类中实现。

  然后我们把各国的计税算法都写成这个抽象类的子类。

  最后计税的时候,根据需要,调用对应的计税算法。

  当我们需要新增某个国家的计税算法时,只需添加一个TaxStrategy的子类,且把算法写进去即可,源代码不需要修改,对代码进行扩展,遵从了开发封闭原则。