本文最后更新于 2024-03-23T16:42:00+00:00
                  
                  
                
              
            
            
              
                
                核心:定义一系列算法,并将每个算法封装在具有共同接口的单独对象中,并可替换。
场景:处理一系统相同但有细微差别的逻辑
代码实现:根据绩效计算奖金
未使用策略模式:代码写死了
1 2 3 4 5 6 7 8 9 10 11 12
   | function getMoney(jixiao, baseMoney) {   if(jixiao === 's') return baseMoney * 2   else if(jixiao === 'a') return baseMoney * 1.5   else if(jixiao === 'b') return baseMoney * 1   else if(jixiao === 'c') return baseMoney * 0.8   else if(jixiao === 'd') return baseMoney * 0.5   else return baseMoney * 0 }
  getMoney('s', 1000)  getMoney('a', 1000)  getMoney('c', 1000) 
 
  | 
 
使用了策略模式:策略可随时替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
   |  const moneyStrategie1 = {   s(baseMoney) {     return baseMoney * 2   },   a(baseMoney) {     return baseMoney * 1.5   },   b(baseMoney) {     return baseMoney * 0.8   },   c(baseMoney) {     return baseMoney * 0.5   },   d(baseMoney) {     return baseMoney * 0   } }
 
  const moneyStrategie2 = {   s(baseMoney) {     return baseMoney * 20   },   a(baseMoney) {     return baseMoney * 15   },   b(baseMoney) {     return baseMoney * 8   },   c(baseMoney) {     return baseMoney * 5   },   d(baseMoney) {     return baseMoney * 0   } }
  function getMoney(strategy) {   this.calcMoney = (jixiao, baseMoney) => {     return strategy[jixiao](baseMoney)   } }
 
  const getMoney1 = new getMoney(moneyStrategie1)
  getMoney1('s', 1000)  getMoney1('a', 1000)  getMoney1('c', 1000) 
 
  const getMoney2 = new getMoney(moneyStrategie2)
  getMoney1('s', 1000)  getMoney1('a', 1000)  getMoney1('c', 1000) 
 
  | 
 
总结:就是将零散的判断逻辑,封装在单独的对象中,并提供一个策略切换函数。