策略模式

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换。
很多公司的年终奖都是与绩效有关的,假如绩效S的4倍工资,A的3倍,B的两倍,写一个函数计算员工的年终奖,最初我们的设计可能是这样的:

var calculateBonus = function (level, salary) {
	if (level === 'S') {
		return salary * 4;
	}
	if (level === 'A') {
		return salary * 3;
	}
	if (level === 'B') {
		return salary * 2;
	}
};

calculateBonus('B', 2000) // 输出4000

这段代码中有大量的if…else…语句,我们使用策略模式重构这段代码:

var strategies = {
	"S": function (salary) {
		return salary * 4;
	},
	"A": function (salary) {
		return salary * 3;
	},
	"B": function (salary) {
		return salary * 2;
	},
};
var calculateBonus = function (level, salary) {
	return strategies[level](salary)
};

console.log(calculateBonus('S', 2000)); //输出:8000
console.log(calculateBonus('A', 1000)); //输出:3000

重构后的代码,我们把各种策略的算法分离开来,在计算的时候可以通过传入不同的参数选取不同的策略,这样以后也可以新增其它策略,调用的时候也很方便。

策略模式的优缺点

优点:
a.策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件判断语句。
b.策略模式提供了对开放-封闭原则的完美支持,将算法封装在独立的strategy中,使得它们易于切换,易于理解,易于扩展。
c.策略模式中的算法也可以复用在系统的其他地方,从而避免许多重复的复制黏贴工作。
d.在策略模式中利用组合和委托来让Context拥有执行算法的能力,这也是继承的一种更轻便的替代方案。
缺点:
会增加策略对象;
要了解所有策略的不同,违反最少知识原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值