定义

策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

策略(Strategy)模式最核心的一点就是,每个算法的结构是一样的,体现在 js 中,可能就是入参和返回值一样,这样才能保证可以相互替换。

结构:

  1. ts 而言,抽象的 算法 类,定义好每个算法的结构;对于 js 而言,就是一个 顶级类 ,所有具体的算法类都是继承这个 顶级类
  2. 具体的算法类
  3. 环境(Context)类:用于切换策略和使用策略的类。

实现

// 1. 抽象出整个算法的结构
abstract class Strategy {abstract strategyMethod(a: number, b: number): number
}// 2. 声明具体的算法
class AddStrategy extends Strategy {strategyMethod(a: number, b: number): number {return a + b;}
}class Subtract extends Strategy {strategyMethod(a: number, b: number): number {return a - b;}
}// 3. 实现 Context 类
interface IStrategy extends Strategy {}
class Context {strategy: IStrategy;constructor(strategy?: IStrategy) {this.setStrategy(strategy);}// 设置当前需要使用的算法setStrategy(strategy: IStrategy): this {this.strategy = strategy;return this;}// 执行算法handle(a: number, b: number): number {return this.strategy.strategyMethod(a, b);}
}// 4. 初始化
const context = new Context();const add = new AddStrategy();
const subtract = new Subtract();const result1 = context.setStrategy(add).handle(9, 3);
console.log(result1); // 12const result2 = context.setStrategy(subtract).handle(9, 3);
console.log(result2); // 6

前端设计模式之策略(Strategy)模式相关推荐

  1. C++设计模式实现--策略(Strategy)模式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/L_Andy/article/details/30489331 一. 举例说明 曾经做了一个程序,程序 ...

  2. 设计模式学习笔记——策略(Strategy)模式

    设计模式学习笔记--策略(Strategy)模式 @(设计模式)[设计模式, 策略模式, Stategy] 设计模式学习笔记策略Strategy模式 基本介绍 策略案例 类图 实现代码 Hand类 S ...

  3. java语言商场打折_Java封装商场打折策略(Strategy模式)

    有了OO的基础后,开始认真学习设计模式. 首先学习的是Strategy,下面就封装商场打折策略来分析下策略模式是怎样一回事. 商场每逢节假日都会对不同的商品采用不同的打折策略,首先卖苹果的说我的苹果要 ...

  4. java if打折怎么算_Java封装商场打折策略(Strategy模式)

    有了OO的基础后,开始认真学习设计模式. 首先学习的是Strategy,下面就封装商场打折策略来分析下策略模式是怎样一回事. 商场每逢节假日都会对不同的商品采用不同的打折策略,首先卖苹果的说我的苹果要 ...

  5. 策略(strategy)模式

    Head First一书中对于策略(strategy)模式的正式定义是:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 为了介绍这个算法,书中讲了 ...

  6. 设计模式--策略(Strategy)模式

    模式定义 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化),该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化) 类图 要点总结 Strategy及其子类为组件提供了 ...

  7. 设计模式之策略者模式

    策略者模式简介 策略者模式定义一个算法接口,并由其实现类去实现,使得每一个算法都得到封装,并让他们可以相互替换.这是一种行为型模式.策略者模式降低了算法行为和环境角色的耦合度,使得算法可以独立发生变化 ...

  8. 策略设计模式_设计模式之策略者模式

    策略者模式简介 策略者模式定义一个算法接口,并由其实现类去实现,使得每一个算法都得到封装,并让他们可以相互替换.这是一种行为型模式.策略者模式降低了算法行为和环境角色的耦合度,使得算法可以独立发生变化 ...

  9. C#设计模式(20)——策略者模式(Stragety Pattern)

    一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 ...

最新文章

  1. 12月第1周.BIZ域名总量TOP10:仅中德澳3国持续上涨
  2. java maven 开发环境_Maven 搭建开发环境
  3. 使用Flink时遇到的问题(不断更新中)
  4. 从零开始的自学之路——css选择器
  5. 监控软件nagios之安装
  6. 可以打开mdb文件的小软件
  7. Python数据结构:二分查找
  8. LTT (Linux Trace Toolkit) 简介
  9. 微软MED-V虚拟化实战教程之二映像准备和测试
  10. heidisql导出为mysql_HeidiSQL工具导出导入MySQL数据
  11. 搭建samba映射网络驱动器
  12. AD13转oRCAD原理图的操作方式
  13. 发票系统KF网络报税服务器信息,增值税发票综合服务平台操作指南及注意事项...
  14. 服务器防火墙有哪些功能和作用?
  15. 2020扁皮筋排名_2020年高性价比弹弓推荐,(12月)弹弓选购攻略
  16. 搜索引擎Lucene(2):索引文件结构及格式
  17. xftp(windows系统与linux系统之间文件传输)
  18. vim常用插件安装及使用
  19. 8421码5421码2421码和余3码的区别
  20. 杨辉三角循环队列实现(数据结构c语言版)

热门文章

  1. 解决SecureCRT(linux远程访问工具)中中文乱码问题
  2. 快速原型设计工具(Axure)的安装、汉化
  3. 写给想成为前端工程师的同学
  4. 两台win7系统使用普通网线如何传文件
  5. js截取html元素生成图片
  6. java.元角分,报销单.html
  7. Linux安装mysql报错:Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
  8. Eclipse代码配色方案设置
  9. macOS Monterey更新下载太慢?macOS Monterey官方原版系统高速下载教程
  10. 怎样将在网上看到的视频下到电脑上