美文网首页
策略模式

策略模式

作者: JohnSmith | 来源:发表于2015-06-08 03:24 被阅读73次

    定義

    定義一系列的算法,把它們一個個封裝起來,並且使它們可以相互替換。

    要點

    • 將不變的部分和變化的部分隔開是每個設計模式的主題,策略模式的目的就是將算法的使用(不變)與算法的實現(變化)分離開來。
    • 定義一系列的算法,把它們各自封裝成策略類,算法被封裝在策略類內部的方法裡。在客戶對 Context 發起請求的時候,Context 總是把請求委託給這些策略對象中間的某一個進行計算。
    • 函數形式的策略對象
    • 策略模式也可以用來封裝一系列的「業務規則」。只要這些業務規則指向的目標一致,並且可以被替換使用,就可以用策略模式來封裝它們。
    • 策略模式的實現並不複雜,關鍵是如何從策略模式的實現背後,找到封裝變化、委託和多態性這些思想的價值。
    • 策略模式提供了對開放-封閉原則的完美支持,將算法封裝在獨立的 strategy 中,使得它們易於切換、易於理解、易於擴展。
    • Peter Norvig:在函數作為一等對象的語言中,策略模式是隱形的。strategy 就是值為函數的變量。

    核心代碼

    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);
    };
    calculateBonus('S', 20000);
    
    \\ 隱形的策略模式
    var S = function(salary) {
        return salary * 4;
    };
    var A = function(salary) {
        return salary * 3;
    };
    var B = function(salary) {
        return salary * 2;
    };
    var calculateBonus = function(fn, salary) {
        return fn(salary);
    };
    calculateBonus(S, 20000);
    

    相关文章

      网友评论

          本文标题:策略模式

          本文链接:https://www.haomeiwen.com/subject/jvtjqttx.html