策略模式

定義

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

要點

  • 將不變的部分和變化的部分隔開是每個設計模式的主題,策略模式的目的就是將算法的使用(不變)與算法的實現(變化)分離開來。
  • 定義一系列的算法,把它們各自封裝成策略類,算法被封裝在策略類內部的方法裡。在客戶對 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);

你可能感兴趣的:(策略模式)