为什么会出现策略模式
常见场景:
根据不同的绩效,设置不同的薪资标准:
绩效S:薪资为基础薪资的4倍
绩效A:薪资为基础薪资的3倍
绩效B:薪资为基础薪资的2倍
常见的业务代码写法:
很多if-else,如下:
const getMoney = (level, salary) => {
if(level === 'S'){
return salary * 4;
}else if(level === 'A'){
return salary * 3;
}else if(level === 'B'){
return salary * 2;
}
}
const salary = 2000;
const level = 'A';
const money = getMoney(level, salary);
以上代码存在的问题:
- 把算法的实现和算法的使用糅合在了一起,这样以后修改算法的规则,就会有很大的侵入性。应当将算法的实现和算法的使用分离。
- 有很多的if-else,这样以后再加一个绩效,就会产生更多的if-else,算法不优雅
- 算法复用性很差,如果想要复用这个算法,需要全部拷贝
js中使用策略模式的写法如下:
//算法的实现
const strategies = {
'S': function (salary){
return salary * 4;
},
'A': function (salary){
return salary * 3
},
'B': function (salary){
return salary * 2;
}
};
const getMoney = (level, salary) => {
return strategies[level](salary);
};
const level = 'A';
const salary = 2000;
const res = getMoney(level, salary);
使用心得:策略模式有点像平时所写的map