当前位置: 首页 > article >正文

js策略模式

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

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 方法');

  }

}

  

// 具体策略类 A

class ConcreteStrategyA extends Strategy {

  constructor() {

    super();

  }

  // 实现算法方法

  algorithm() {

    console.log('执行具体策略 A 的算法');

  }

}

  

// 具体策略类 B

class 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.kler.cn/a/473280.html

相关文章:

  • 比较procfs 、 sysctl和Netlink
  • 《Spring Framework实战》9:4.1.4.依赖注入
  • 小程序组件 —— 30 组件 - 背景图片的使用
  • LAMP搭建
  • STM32裸机开发转FreeRTOS教程
  • 基于SMT32U575RIT单片机-中断练习
  • UDP -- 简易聊天室
  • 使用 Rust 和 WASM 打造高性能 Web 应用
  • 以太网协议在汽车应用中的动与静
  • Java jdk8新特性:Stream 流
  • esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu
  • 《(限)战斗天赋VR》V02122024官方中文学习版
  • 高防服务器对于网络攻击是怎样进行防御的?
  • 服务器与机顶盒
  • 文件传输速查表:Windows 和 Linux
  • zookeeper监听机制(Watcher机制)
  • mysql之sql的优化方案(重点)
  • 【关于 vite 使用plugin-legacy兼容低版本浏览器仍出现的问题的情况】
  • 微信小程序实现长按录音,点击播放等功能,CSS实现语音录制动画效果
  • 庐山派k230使用串口通信发送数据驱动四个轮子并且实现摄像头画面识别目标检测功能
  • HCIE-day10-ISIS
  • 计算机视觉目标检测-DETR网络
  • Java-数据结构-链表-高频面试题(2)
  • Goldendb数据库dbtool命令介绍
  • web服务器架构,websocket
  • 使用高云小蜜蜂GW1N-2实现MIPI到LVDS(DVP)转换案例分享