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设计模式之策略模式

JavaScript 设计模式之策略模式

Javascript设计模式总结之 -- 策略模式

JavaScript设计模式之策略模式

深入理解JavaScript系列(33):设计模式之策略模式

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)