js-设计模式学习笔记-策略模式
2017-04-05 16:31
447 查看
策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换(相互替换:表现为它们具有相同的目标和意图)。
策略模式的目的是讲算法的使用与算法的实现分离开来。
一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context接受客户的请求,随后把请求委托给某一个策略类。要做到这点,说明Context中要维持对某个策略对象的引用。
JavaScript版本的策略模式:
例子:根据绩效等级计算奖金。
使用策略模式消除了可能出现的大片的条件分支语句。所有跟计算奖金相关的逻辑不放在Context中,而是分布在各个策略对象中。Context并没有计算奖金的能力,而是把这个职责委托给了某个策略对象。每个策略对象负责的算法已被各自封装在对象内部。当我们对这些策略对象发出“计算奖金”的请求时,它们会返回各自不同的计算结果,这正是对象多态性的体现,也是“它们可以相互替换”的目的。替换Context中当前保存的策略对象,便能执行不同的算法来得到我们想要的结果。
策略模式的目的是讲算法的使用与算法的实现分离开来。
一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context接受客户的请求,随后把请求委托给某一个策略类。要做到这点,说明Context中要维持对某个策略对象的引用。
JavaScript版本的策略模式:
例子:根据绩效等级计算奖金。
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
使用策略模式消除了可能出现的大片的条件分支语句。所有跟计算奖金相关的逻辑不放在Context中,而是分布在各个策略对象中。Context并没有计算奖金的能力,而是把这个职责委托给了某个策略对象。每个策略对象负责的算法已被各自封装在对象内部。当我们对这些策略对象发出“计算奖金”的请求时,它们会返回各自不同的计算结果,这正是对象多态性的体现,也是“它们可以相互替换”的目的。替换Context中当前保存的策略对象,便能执行不同的算法来得到我们想要的结果。
相关文章推荐
- java 设计模式 学习笔记(4) 策略模式
- HeadFirst 设计模式学习笔记1--策略模式
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式学习笔记二:Strategy,策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记--Strategy 策略模式
- 【HeadFirst 设计模式学习笔记】1.策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式学习笔记二【策略模式】
- HeadFirst 设计模式学习笔记1--策略模式
- 二 策略模式——设计模式学习笔记
- java 设计模式学习笔记十五 strategy 策略设计模式
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 设计模式学习笔记(二):策略模式
- 学习笔记 ---- 设计模式之策略模式
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 设计模式学习笔记一 简单工厂策略模式实现销售策略的变更(一)
- javascript学习笔记(九) js对象 设计模式