定义
提起if else,我们肯定很熟悉,但当我们大量使用if else时,是否会想到这其中会产生的问题?
当大量代码放进if else里时,我们的整个代码片段将会非常大。符合了if的某个条件时,某段代码才会被调用,其它代码此时就成了无用代码,造成了空间浪费,且不易维护。
此时策略模式就可以发挥它的作用了!
策略模式就是对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
这里的不同的场景对应if else 里面的各种条件,不同的实现算法对应if else里面的具体实现算法。
如何使用策略模式
让我们看一段if else代码:
很典型的一段代码,实现了根据不同的地区采用不同的计税算法。如果需求变更,要多加一个国家的计税算法,怎么办呢?
很自然的,我们会在枚举那多加一个变量,然后再CalculateTax()中加一段else if。
但是,如果我们这么改就会违背了开发封闭设计原则,我们应该进行拓展,而不是修改源代码!
使用了策略模式后:
我们先建一个抽象类:TaxStrategy,里面有一个虚函数Caculate(...),这个函数在子类中实现。
然后我们把各国的计税算法都写成这个抽象类的子类。
最后计税的时候,根据需要,调用对应的计税算法。
当我们需要新增某个国家的计税算法时,只需添加一个TaxStrategy的子类,且把算法写进去即可,源代码不需要修改,对代码进行扩展,遵从了开发封闭原则。