在5.1节中,我们让strategy对象从各个策略类中创建而来,这是模拟一些传统面向对象语言的实现。实际上在JavaScript语言中,函数也是对象,所以更简单和直接的做法是把strategy直接定义为函数: var strategies = { "S": function( salary ){ return salary * 4; }, "A": function( salary ){ return salary * 3; }, "B": function( salary ){ return salary * 2; } }; 同样,Context也没有必要必须用Bonus类来表示,我们依然用calculateBonus 函数充当Context来接受用户的请求。经过改造,代码的结构变得更加简洁: 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', 20000 ) ); // 输出:80000 console.log( calculateBonus( 'A', 10000 ) ); // 输出:30000 在接下来的缓动动画和表单验证的例子中,我们用到的都是这种函数形式的策略对象。
JavaScript设计模式与开发实践——5.2 JavaScript版本的策略模式
书名: JavaScript设计模式与开发实践
作者: 曾探
出版社: 人民邮电出版社
出版年: 2015-5
页数: 294
定价: 59.00元
装帧: 平装
丛书: 图灵原创
ISBN: 9787115388889