定义

把一些小的算法,封装起来,使他们之间可以相互替换(把代码的实现和使用分离开来)

理解

策略模式的使用场景和状态模式十分类似,都是在程序中有多个if判断语句,有多种状态需要选择,不同的是策略模式只需要获得对应判断的的执行语句,而不需要类似状态机制的状态切换,所以定义为小的算法的封装;

实现

  1. var obj = {
  2. "A": function(salary) {
  3. return salary * 4;
  4. },
  5. "B" : function(salary) {
  6. return salary * 3;
  7. },
  8. "C" : function(salary) {
  9. return salary * 2;
  10. }
  11. };
  12. var calculateBouns =function(level,salary) {
  13. return obj[level](salary);
  14. };
  15. console.log(calculateBouns('A',10000)); // 40000

总结

优缺点

  • 策略模式可以避免代码中的多重判断条件。
  • 策略模式很好的体现了开放-封闭原则,将一个个算法(解决方案)封装在一个个策略类中。便于切换,理解,扩展。
  • 策略中的各种算法可以重复利用在系统的各个地方,避免复制粘贴。
  • 策略模式在程序中或多或少的增加了策略类。但比堆砌在业务逻辑中要清晰明了。
  • 违反最少知识原则,必须要了解各种策略类,才能更好的在业务中应用。

    vs状态模式

  • 策略模式

    状态对象+返回获取方法的对象接口

  • 状态模式

    状态对象+能够调用状态对象内部状态的接口方法对象