策略模式
业务场景
假设我们现在需要根据不同的类型采取不同的方法,此时我们可能会写出这样的代码:
但是这样的代码写多了会难以维护,并且很明显他违背了面向对象编程的开闭原则以及单一原则
所以!当我们的代码如果像这样有多个条件分支并且每个条件分支都可以封装起来替换的话,我们就可以使用策略模式来优化
使用方法
如果是java这种面向对象的编程语言
第一步:定义一个接口或者抽象类,里面有两个方法,一个方法匹配类型,一个可替换的逻辑实现方法
第二步:分别定义A和B的不同策略的差异化实现(即不同策略的实现类)
第三步:借助spring的生命周期,使用ApplicationContextAware接口把对应的策略初始化到map里面然后对外提供实现方法
那我们使用js如何用起来呢?
众所周知js是面向函数的,所以我们的思路应该是将一组可能变化的逻辑分离出来,每种逻辑独立成函数(策略)
通过某种机制(如 case
或映射对象)动态选择需要的策略,而不是硬写多个 if-else
巧记
策略模式就跟他的名字一样,比如我要打赢一局游戏 我可以写很多个互不干扰的策略