js策略模式

ops/2025/1/12 15:32:21/

定义一组算法,将每个算法封装成一个独立的类,并使它们可以互相替换。策略模式使得算法的变化不会影响到使用算法的客户。
在这里插入图片描述

const priceProcessor = {pre(originPrice) {if (originPrice >= 100) {return originPrice - 20;}return originPrice * 0.9;},onSale(originPrice) {if (originPrice >= 100) {return originPrice - 30;}return originPrice * 0.8;},back(originPrice) {if (originPrice >= 200) {return originPrice - 50;}return originPrice;},fresh(originPrice) {return originPrice * 0.5;},};// 询价函数function askPrice(tag, originPrice) {return priceProcessor[tag](originPrice)}
// 定义策略接口class Strategy {constructor() {if (this.constructor === Strategy) {throw new Error('不能实例化抽象类');}}// 定义算法方法algorithm() {throw new Error('必须实现 algorithm 方法');}}// 具体策略类 Aclass ConcreteStrategyA extends Strategy {constructor() {super();}// 实现算法方法algorithm() {console.log('执行具体策略 A 的算法');}}// 具体策略类 Bclass ConcreteStrategyB extends Strategy {constructor() {super();}// 实现算法方法algorithm() {console.log('执行具体策略 B 的算法');}}// 上下文类class Context {constructor(strategy) {this.strategy = strategy;}// 执行算法方法executeAlgorithm() {this.strategy.algorithm();}}// 使用策略模式let context = new Context(new ConcreteStrategyA());context.executeAlgorithm();context = new Context(new ConcreteStrategyB());context.executeAlgorithm();

http://www.ppmy.cn/ops/149485.html

相关文章

Linux 环境下编译安装 OpenCV 4.8.x

在 Linux 环境下编译安装 OpenCV 4.8.x 需要安装一系列依赖库。以下是详细的步骤说明,并附上每个依赖库的作用解释。 1. 环境准备 操作系统 推荐使用 Ubuntu 20.04/22.04 或其他基于 Debian 的 Linux 发行版。 编译器 GCC 9 或更高版本(默认已安装&a…

基于ADAS 与关键点特征金字塔网络融合的3D LiDAR目标检测原理与算法实现

一、概述 3D LiDAR目标检测是一种在三维空间中识别和定位感兴趣目标的技术。在自动驾驶系统和先进的空间分析中,目标检测方法的不断演进至关重要。3D LiDAR目标检测作为一种变革性的技术,在环境感知方面提供了前所未有的准确性和深度信息. 在这里&…

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功 1. 准备安装包与maven编译环境1.1 安装环境准备1.2 修改pom1.3 打包命令2. 编译与问题解决2.1 开始编译 失败, 缺包pentaho-aggdesigner-algorithm:pom:5.1.5-jhyde2.2 Hive Spark Remote Client 模块…

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …

Navicat Premium 16.0.90 for Mac 安装与free使用

步骤 1.打开下好的 dmg 文件 (这个界面不要关闭&#xff09; 2.将Navicat Premium 拖动至 Applications 这时出现 点击取消。 3.点开系统设置(系统偏好设置) -> 隐私与安全 -> 安全性 -> 允许以下来源的应用程序 可以看到只有 App Store 和 App Store与已知开发者…

本地服务器Docker搭建个人云音乐平台Splayer并实现远程访问告别烦人广告

前言 大家好&#xff01;今天我要给大家分享的是如何在Ubuntu上用Docker快速搭建高颜值无广告的某抑云音乐播放器Splayer的详细流程&#xff0c;并且结合cpolar内网穿透工具实现远程访问。如果你是音乐爱好者&#xff0c;经常需要在外办公或旅行&#xff0c;这个教程绝对能让你…

关于大一上的总结

大一上总结 前言 源于学长们都喜欢写总结&#xff0c;今晚也正好听见一首有点触动心灵的歌&#xff0c;深有感慨&#xff0c;故来此写下这篇总结 正文 1.暑假前的准备 暑假之前姑且还是学习了基本的C语法&#xff0c;大概是到了结构体的地方&#xff0c;进度很慢&#xff0…

ubuntu NVIDIA 驱动程序安装指南

NVIDIA 驱动程序安装指南 卸载现有的 NVIDIA 驱动程序&#xff1a; sudo apt-get purge nvidia*添加 NVIDIA PPA&#xff1a; sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update安装推荐的 NVIDIA 驱动程序&#xff1a; sudo ubuntu-drivers devices sudo…