策略模式
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('')