”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript 设计模式 - 行为 - 策略

JavaScript 设计模式 - 行为 - 策略

发布于2024-11-01
浏览:521

JavaScript Design Patterns - Behavioral - Strategy

策略模式定义了一系列算法,封装了每个算法,并使它们可以互换。

在此示例中,我们有一组可应用于购物车的折扣。我们可以传递将应用于构造函数的函数,并以这种方式更改折扣金额。

class ShoppingCart {
  constructor(discount) {
    this.discount = discount;
    this.amount = 0;
  }

  checkout() {
    return this.discount(this.amount);
  }

  setAmount(amount) {
    this.amount = amount;
  }
}

function guest(amount) {
  return amount;
}

function regular(amount) {
  return amount * 0.9;
}

function premium(amount) {
  return amount * 0.8;
}

export { ShoppingCart, guest, regular, premium };

完整的例子在这里? https://stackblitz.com/edit/vitejs-vite-tygwh3?file=strategy.js

结论

当您有许多类似的类,仅在执行某些行为的方式上有所不同时,请使用此模式。


希望您觉得它有帮助。感谢您的阅读。 ?

让我们联系吧!你可以在以下位置找到我:

  • 中: https://medium.com/@nhannguyendevjs/
  • 开发:https://dev.to/nhannguyendevjs/
  • Hashnode:https://nhannguyen.hashnode.dev/
  • Linkedin: https://www.linkedin.com/in/nhannguyendevjs/
  • X(原 Twitter):https://twitter.com/nhannguyendevjs/
  • 请我喝杯咖啡: https://www.buymeacoffee.com/nhannguyendevjs
版本声明 本文转载于:https://dev.to/nhannguyendevjs/javascript-design-patterns-behavioral-strategy-152d?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用 Kubernetes Go-Client 以编程方式检索 Pod 详细信息?
    如何使用 Kubernetes Go-Client 以编程方式检索 Pod 详细信息?
    Kubernetes Go-Client:检索 Pod 详细信息在 Kubernetes 中,检查 Pod 详细信息的能力对于有效管理集群资源至关重要。使用 Kubernetes client-go,可以以编程方式访问类似于 kubectl get pods 输出的 pod 信息。要实现此目的,可以...
    编程 发布于2024-11-07
  • 如何解决 Alpine 容器 Go 中 Pingdom API 的 x509 证书问题?
    如何解决 Alpine 容器 Go 中 Pingdom API 的 x509 证书问题?
    x509 Go 中 Pingdom API 的证书问题在利用 pingdom-go 包与 Pingdom API 交互时,容器化应用程序遇到以下问题错误:“获取 https://api.pingdom.com/api/2.1/checks/0:x509:由未知颁发机构签名的证书。”这意味着容器化应用...
    编程 发布于2024-11-07
  • 前端 UI 组件
    前端 UI 组件
    iHateReading 自定义存储库 在过去的一个月里,我制作了很多 UI 组件,这些组件是真实世界的 Web 组件,例如按钮、输入、表单、横幅、画廊 出于多种目的而制造的组件 学习前端并在我所做的事情上变得更好 提高前端开发中编写更好代码的能力(稍后我会解释这意味着什么) 我目...
    编程 发布于2024-11-07
  • 我可以仅使用 .frm 文件恢复 MySQL 数据库吗?
    我可以仅使用 .frm 文件恢复 MySQL 数据库吗?
    使用 .frm 文件恢复 MySQL 数据库执行常规数据库备份时,捕获整个数据库结构和数据至关重要。数据。但是,在某些情况下,用户可能只能访问 .frm 文件,该文件代表表结构,而不是实际数据。在这种情况下,仅使用 .frm 文件恢复数据库及其数据可能具有挑战性。幸运的是,在某些情况下可以从 .fr...
    编程 发布于2024-11-07
  • 在 PHP 中启用或禁用“allow_url_fopen”:评估风险和替代方案
    在 PHP 中启用或禁用“allow_url_fopen”:评估风险和替代方案
    授予或不授予:探索 PHP 中 'allow_url_fopen' 的用法开发者经常请求激活 'allow_url_fopen' 功能在生产服务器上。鉴于当前的网络开发状况,确定此权限是否仍然是必要的或者是否有更好的替代方案至关重要。评估情况做出决定之前,请考虑以下事...
    编程 发布于2024-11-07
  • 如何覆盖 PHP 的 `mail()` 函数中的信封返回地址?
    如何覆盖 PHP 的 `mail()` 函数中的信封返回地址?
    如何在 PHP Mail 中覆盖信封返回地址为了解决使用 PHP 的 mail() 函数设置信封返回地址的问题,这个答案提供了一个简单的解决方案。mail() 函数接受可选的第四个和第五个参数。虽然第四个参数用于设置标头,但第五个参数可用于将选项直接传递给底层的 sendmail 命令。通过在第五个...
    编程 发布于2024-11-07
  • 科技观察 #1
    科技观察 #1
    大家好,这是我上周的技术手表,其中包含很多 #react、一点 #html、一些 #css 和 #npm。 ? https://www.totaltypescript.com/how-to-create-an-npm-package 如何创建 NPM 包 创建、测试和发布 NPM 包(从初始化到发布...
    编程 发布于2024-11-07
  • mysqli_fetch_array() 何时显示错误“期望参数 1 为 mysqli_result,给定布尔值”?
    mysqli_fetch_array() 何时显示错误“期望参数 1 为 mysqli_result,给定布尔值”?
    mysqli_fetch_array() 期望 MySQLi 结果,而不是布尔值在给定的 PHP 代码中,错误“mysqli_fetch_array() 期望参数 1 为mysqli_result, boolean Give" 表示使用 mysqli_query() 的查询执行失败,它返回...
    编程 发布于2024-11-07
  • 子集和问题的 PHP 程序
    子集和问题的 PHP 程序
    子集和问题是计算机科学和动态规划中的经典问题。给定一组正整数和一个目标和,任务是确定是否存在给定集合的子集,其元素之和等于目标和。 子集和问题的PHP程序 使用递归解决方案 例子 <?php // A recursive solution for the subset sum problem ...
    编程 发布于2024-11-07
  • JavaScript 数组方法:综合指南
    JavaScript 数组方法:综合指南
    数组是 JavaScript 中最基本的数据结构之一。使用数组,您可以在单个变量中存储多个值。 JavaScript 提供了许多内置方法来操作数组,使它们具有令人难以置信的通用性。在这篇文章中,我们将探讨所有内置数组方法以及如何在 JavaScript 项目中有效地使用它们。 核心方...
    编程 发布于2024-11-07
  • 高级 T:依赖参数、推断联合以及 Twitter 上的健康交互。
    高级 T:依赖参数、推断联合以及 Twitter 上的健康交互。
    每次我用 TypeScript 写成 Foo 时,我都会感受到失败的沉重。 在一种情况下,这种感觉特别强烈:当函数采用的参数取决于哪个 "mode" 处于活动状态时。 通过一些示例代码更清晰: type Provider = "PROVIDER A" | "PR...
    编程 发布于2024-11-07
  • 如何创建人力资源管理解决方案
    如何创建人力资源管理解决方案
    1. Understanding the Basics of Frappe and ERPNext Task 1: Install Frappe and ERPNext Goal: Get a local or cloud-based instance of ERP...
    编程 发布于2024-11-07
  • 从周五黑客到发布:对创建和发布开源项目的思考
    从周五黑客到发布:对创建和发布开源项目的思考
    从周五补丁破解到发布:对创建和发布开源项目的思考 这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。 这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些思考,我希望能启发你做自己的项目 思考(此) 作为 Java 开发人员学习 Go l...
    编程 发布于2024-11-07
  • 可以使用 constexpr 在编译时确定字符串长度吗?
    可以使用 constexpr 在编译时确定字符串长度吗?
    常量表达式优化:可以在编译时确定字符串长度吗?在优化代码的过程中,开发人员尝试计算使用递归函数在编译时计算字符串文字的长度。此函数逐字符计算字符串并返回长度。初始观察:该函数似乎按预期工作,在运行时返回正确的长度并生成表明计算发生在编译时的汇编代码。这就提出了一个问题:是否保证length函数会在编...
    编程 发布于2024-11-07
  • 在 Raspberry Pi 上运行 Discord 机器人
    在 Raspberry Pi 上运行 Discord 机器人
    Unsplash 上 Daniel Tafjord 的封面照片 我最近完成了一个软件工程训练营,开始研究 LeetCode 的简单问题,并觉得如果我每天都有解决问题的提醒,这将有助于让我负起责任。我决定使用按 24 小时计划运行的不和谐机器人(当然是在我值得信赖的树莓派上)来实现此操作,该机器人将执...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3