js策略模式

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

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)

  }
  
  
js 复制代码
// 定义策略接口

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();
相关推荐
Allen Bright4 分钟前
【JVM-1】深入解析JVM:Java虚拟机的核心原理与工作机制
java·开发语言·jvm
肖老师xy8 分钟前
h5使用better scroll实现左右列表联动
前端·javascript·html
2401_8582861110 分钟前
123.【C语言】数据结构之快速排序挖坑法和前后指针法
c语言·开发语言·数据结构·算法·排序算法
一路向北North13 分钟前
关于easyui select多选下拉框重置后多余显示了逗号
前端·javascript·easyui
Libby博仙16 分钟前
.net core 为什么使用 null!
javascript·c#·asp.net·.netcore
一水鉴天16 分钟前
为AI聊天工具添加一个知识系统 之26 资源存储库和资源管理器
前端·javascript·easyui
_WndProc18 分钟前
【C++/控制台】2048小游戏
开发语言·c++·游戏·游戏程序
白白白白纸呀21 分钟前
ADO.NET知识总结6---SqlDataAdapter桥接器
开发语言·c#·.net
C++小厨神29 分钟前
SQL语言的函数实现
开发语言·后端·golang
万物得其道者成34 分钟前
在高德地图上加载3DTilesLayer图层模型/天地瓦片
前端·javascript·3d