#每日一记# 用策略模式替代 if…else 写出更优雅的代码

我个人理解的策略模式就是把原本 if...else 中的条件判断存到一个对象的 key 上,让原本命令式代码转变为申明式。极大的增加了代码灵活性和可读性。

这个写法用的好,代码可以写的赏心悦目。

基本用法

场景:不同的任务类型分配不同的奖池

javascript 复制代码
function getRewards (taskType) {
  if (taskType === 1) {
    return ['手机', '电脑', '平板']
  }
  else if (taskType === 2) {
    return ['水杯', '笔记本']
  }
}
javascript 复制代码
function getRewards (taskType) {
  const rewardMap = {
    1: ['手机', '电脑', '平板'],
    2: ['水杯', '笔记本'],
  }

  return rewardMap[taskType]
}

本质上是一种形式的规范,从过于灵活的形式变化为整齐有规律的形式。

复杂用法

当条件比较复杂时,就可以有一些不同的花样可以玩。

场景:不同的年龄段分配不同的底薪

javascript 复制代码
function getBaseSalary (age) {
  const baseSalaryMap = {
    s1: {
      condition: (age) => age < 20,
      baseSalary: 1000,
    },
    s2: {
      condition: (age) => age >= 20 && age < 30,
      baseSalary: 2000,
    },
    s3: {
      condition: (age) => age >= 30,
      baseSalary: 3000,
    },
  }

  return (
    Object
    .values(baseSalaryMap)
    .find((item) => item.condition(age))
    .baseSalary
  )
}

场景:两个开关控制一个灯

javascript 复制代码
function getBaseSalary (switch1, switch2) {

  const resMap = {
    true_true: '1',
    true_false: '2',
    false_true: '3',
    false_false: '4',
  }

  return resMap[`${switch1}_${switch2}`]
}

还有什么更有趣的场景,评论区可以留言分享。

相关推荐
CF14年老兵8 分钟前
React 共享状态:告别“祖传”Props,拥抱“真香”体验!🚀
前端·react.js·trae
一点一木20 分钟前
🚀 2025 年 08 月 GitHub 十大热门项目排行榜 🔥
前端·人工智能·github
excel23 分钟前
前端如何优雅展示 1 万条数据?从下拉追加到虚拟列表的实战对比
前端
IT_陈寒33 分钟前
React性能优化:5个90%开发者不知道的useEffect内存泄漏陷阱与实战解法
前端·人工智能·后端
秉承初心42 分钟前
Electron 项目来实现文件下载和上传功能(AI)
javascript·electron·iphone
請你喝杯Java2 小时前
【工具类】得到多个数组中的相同元素
开发语言·javascript
祈祷苍天赐我java之术4 小时前
CSS 进阶用法
前端·css
2501_915106327 小时前
移动端网页调试实战,iOS WebKit Debug Proxy 的应用与替代方案
android·前端·ios·小程序·uni-app·iphone·webkit
柯南二号8 小时前
【大前端】React Native 调用 Android、iOS 原生能力封装
android·前端·react native
睡美人的小仙女1279 小时前
在 Vue 前端(Vue2/Vue3 通用)载入 JSON 格式的动图
前端·javascript·vue.js