javascript设计模式之策略模式
Posted 微个日光日
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript设计模式之策略模式相关的知识,希望对你有一定的参考价值。
概念
基本定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
策略模式指的是定义一系列的算法,把它们一个个封装起来。将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。
策略模式的实现并不复杂,关键是如何从策略模式的实现背后,找到封装变化、委托和多态性这些思想的价值。
应用
在实际开发中,我们通常会把算法的含义扩散开来,使策略模式也可以用来封装 一系列的“业务规则”。只要这些业务规则指向的目标一致,并且可以被替换使用,我们就可以 用策略模式来封装它们。
特点
- 策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句。
- 策略模式提供了对开放—封闭原则的完美支持,将算法封装在独立的 strategy中,使得它们易于切换,易于理解,易于扩展。
- 策略模式中的算法也可以复用在系统的其他地方,从而避免许多重复的复制粘贴工作。
- 在策略模式中利用组合和委托来让 Context 拥有执行算法的能力,这也是继承的一种更轻便的替代方案。
例子
以下条件判断语句太多
var calculateBonus = function( performanceLevel, salary ){
if ( performanceLevel === 'A' ){
return salary * 3;
}
if ( performanceLevel === 'B' ){
return salary * 2;
}
if ( performanceLevel === 'C' ){
return salary * 1;
}
};
calculateBonus( 'A', 7000 ); // 输出:21000
calculateBonus( 'B', 6000 ); // 输出:12000
改用策略模式:
var strategies = {
"A": function( salary ){
return salary * 3;
},
"B": function( salary ){
return salary * 2;
},
"C": function( salary ){
return salary * 1;
}
};
var calculateBonus = function( level, salary ){
return strategies[ level ]( salary );
};
console.log( calculateBonus( 'A', 20000 ) ); // 输出:60000
console.log( calculateBonus( 'B', 10000 ) ); // 输出:20000
以上是关于javascript设计模式之策略模式的主要内容,如果未能解决你的问题,请参考以下文章
深入理解JavaScript系列(33):设计模式之策略模式
JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)