策略模式

Strategy

概述
对象行为模式
定义一系列算法,并将每个算法封装起来,使它们可以互相替换|切换
算法的变化不会影响算法的客户:对客户是透明的
主要解决if-else分支过多带来的复杂和维护
具有良好的扩展,可以随时添加新的逻辑
应用
绩效考评:根据评定等级和工资计算最后奖励
路由开发
列表渲染
参考代码
Strategy:根据实际制定策略对象
let Bonus = {
  'A': (salary) => {
    return salary * 2
  },
  'B': (salary) => {
    return salary * 1.8
  },
  'C': (salary) => {
    return salary * 1.6
  },
  'D': (salary) => {
    return salary * 1
  },
  'E': (salary) => {
    return salary * 0.8
  }
}
function getBonus(level, salary) {
  return Bonus[level](salary)
}          
Usage
console.log(getBonus('A', 8000));
console.log(getBonus('B', 8000));
console.log(getBonus('C', 8000));
console.log(getBonus('D', 8000));
console.log(getBonus('E', 8000)); 
后台评论管理
根据帖子的不同状态,指定不同的类
列表区别渲染
// data
let list = [{
  title: 'gl',
  type: 1
}, {
  title: 'cq',
  type: 1
}, {
  title: 'sh',
  type: 1
}, {
  title: 'nj',
  type: 1
}, {
  title: 'gz',
  type: 1
}, {
  title: 'xm',
  type: 2
}, {
  title: 'fs',
  type: 2
}, {
  title: 'hk',
  type: 2
}, {
  title: 'dg',
  type: 3
}]

// strategy
let flag = {
  1: {
    className: 'pass'
  },
  2: {
    className: 'fail'
  },
  3: {
    className: 'todo'
  }
}

// render
news.innerHTML = list.map(item => {
  return `<li class='${flag[item.type].className}'>${item.title}</li>`
}).join('')