设计模式-策略模式

为什么会出现策略模式

常见场景:
根据不同的绩效,设置不同的薪资标准:
绩效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);

以上代码存在的问题:

  1. 把算法的实现和算法的使用糅合在了一起,这样以后修改算法的规则,就会有很大的侵入性。应当将算法的实现和算法的使用分离。
  2. 有很多的if-else,这样以后再加一个绩效,就会产生更多的if-else,算法不优雅
  3. 算法复用性很差,如果想要复用这个算法,需要全部拷贝

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值