【夯实基础】《JavaScript设计模式与开发实践》笔记——策略模式

策略模式

  • 定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
  • 目的就是将算法的使用与算法的实现分离开来
  • 组成
    • 一组策略类
      策略类封装了具体的算法,并负责具体的计算过程。
    • 环境类 Contex
      Context 接受客户的请求,随后 把请求委托给某一个策略类。要做到这点,说明 Context 中要维持对某个策略对象的引用。
  • 优点
    • 策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句
    • 策略模式提供了对开放—封闭原则的完美支持,将算法封装在独立的 strategy 中,使得它
      们易于切换,易于理解,易于扩展
    • 策略模式中的算法也可以复用在系统的其他地方,从而避免许多重复的复制粘贴工作。
    • 在策略模式中利用组合和委托来让 Context 拥有执行算法的能力,这也是继承的一种更轻
      便的替代方案。
  • 缺点
    • 使用策略模式会在程序中增加许多策略类或者策略对象
    • 要使用策略模式,必须了解所有的 strategy,必须了解各个 strategy 之间的不同点, 这样才能选择一个合适的 strategy

使用策略模式计算奖金

很多公司的年终奖是根据员工的工资基数和年底绩效情况来发放的。例如,绩效为 S 的人年 终奖有 4 倍工资,绩效为 A 的人年终奖有 3 倍工资,而绩效为 B 的人年终奖是 2 倍工资。假设财 务部要求我们提供一段代码,来方便他们计算员工的年终奖。

var strategies = {
	"S": function( salary ){
		return salary * 4;
	},
	"A": function( salary ){
		return salary * 3;
	},
	"B": function( salary ){
		return salary * 2;
	}
};
// 环境类 Context
var calculateBonus = function( level, salary ){
	return strategies[ level ]( salary );
};
console.log( calculateBonus( 'S', 20000 ) ); // 输出:80000
console.log( calculateBonus( 'A', 10000 ) ); // 输出:30000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值