设计模式在 TypeScript 中的应用 - 策略模式

TypeScript 设计模式之【策略模式】 策略模式是一种行为型设计模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换。策略模式让算法的变化独立于使用算法的客户。这种模式提高了系统的灵活性和可扩展性,同时也提高了代码的可读性和可维护性。合理使用策略模式,可以让你的代码结构更加清晰,更易于理解和维护。喜欢的话就❤️,关注一下吧,有问题也欢迎讨论指教。!!下期预告: TypeScript 设计模式之【模板方法模式】 阅读详情

定义

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

实现

思路:创建表示各种策略的对象,和一个行为随着策略对象改变而改变的 context 对象。

一个简单的加减乘例子:

interface Compute {
  computeF (num1: number, num2: number): number
}

// 创建策略对象
class ComputeAdd implements Compute {
  public computeF (
    num1: number,
    num2: number
  ): number {
    return num1 + num2
  }
}

class ComputeSub implements Compute {
  public computeF (
    num1: number,
    num2: number
  ): number {
    return num1 - num2
  }
}

class ComputeMul implements Compute {
  public computeF (
    num1: number,
    num2: number
  ): number {
    return num1 * num2
  }
}

// 创建行为类
class Context {
  public compute: Compute

  public constructor (compute: Compute) {
    this.compute = compute
  }

  public excuteCompute (
    num1: number,
    num2: number
  ): number {
    return this.compute.computeF(num1, num2)
  }
}

let context1 = new Context(new ComputeAdd())
                  .excuteCompute(1, 2)
let context2 = new Context(new ComputeSub())
                  .excuteCompute(1, 2)
let content3 = new Context(new ComputeMul())
                  .excuteCompute(1, 2)

console.log(context1, context2, content3) // 3, -1, 2

复杂一点的例子(打怪):

// 武器接口
interface Weapon {
  useWeapon (): void
}

// 技能接口
interface Skill {
  useSkill (): void
}

// 武器类
class Gun implements Weapon {
  public useWeapon () {
    console.log( 'Weapon: Gun')
  }
}

class Stick implements Weapon {
  public useWeapon () {
    console.log('Weapon: Stick')
  }
}

// 技能类
class Magic implements Skill {
  public useSkill () {
    console.log('Skill: Magic')
  }
}

class Kongfu implements Skill {
  public useSkill () {
    console.log('Skill: Chinese Kongfu')
  }
}

// 抽象类,用于给其他类继承
abstract class Way {
  // 武器
  public weapon: Weapon

  // 技能
  public skill: Skill

 // 设置武器
  public setWeapon (weapon: Weapon): void {
    this.weapon = weapon
  }

  // 设置技能
  public setSkill (skill: Skill): void {
    this.skill = skill
  }
  public getWeaponAndSkill (): void {
    this.weapon.useWeapon()
    this.skill.useSkill()
  }

  // 抽象方法
  public abstract saySome (): void
}

class SimpleWay extends Way {
  public constructor () {
    super()
    this.weapon = new Gun()
    this.skill = new Magic()
  }

  public saySome () {
    console.log('屠龙宝刀,点击就送')
  }
}

const way = new SimpleWay()
way.saySome()

console.log('=======')

way.getWeaponAndSkill()

console.log('=======')

way.setWeapon(new Stick)
way.setSkill(new Kongfu)
way.getWeaponAndSkill()


第22章:设计模式应用——让AI理解需求并推荐适合的设计模式 > - 如何用自然语言描述业务场景,让AI推荐合适的设计模式 > - 工厂模式、策略模式、观察者模式的AI生成完整代码示例 > - 用AI将“面条代码”重构为设计模式的实战案例 > - 设计模式选择决策表(什么场景用什么模式) > - 我如何用AI把一个支付模块从满屏if-else改造为策略模式 阅读详情

相关推荐

typescript-uml:TypeScript到UML逆向工程

TypeScript到UML逆向工程 工作正在进行中

TS版设计模式-策略模式

继承实现了面向对象模式的“可复用”,但是可复用中缺少了灵活性和可扩展性,单纯的使用继承不止不会减少代码量,反而会增加代码复杂度,策略模式中的鸭子实例在使用了继承的前提下,添加了两个接口FlyBehavior,QuackBehavior,使属性可变,增加了超类的灵活性。

Xiao_ShiGuang_941111的博客 640

知识导航神器:Obsidian Breadcrumbs 插件全攻略

Parent: 插件Child: Breadcrumbs 用法这样,它就能识别出你和其他笔记的关系。

m0_73735578的博客 1628

设计模式:TypeScript中的单例模式

在开发软件系统时,如果遇到创建对象需要花费太多时间或消耗太多资源,但使用频率很高的对象,可以考虑使用单例模式。

专注于认知和效率提升方面的分享 2537

001-基础入门-Web演示源码&资源&工具箱等

小迪安全2023笔记

wushangyu32335的博客 4256

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 668

设计模式:TypeScript中的策略模式

​如何在 TypeScript 中使用和实现 Strategy 模式来解决 Web 项目中的实际问题。欢迎来到 TypeScript 设计模式系列,该系列介绍了使用 TypeScript 进行 Web 开发的一些有用的设计模式。每个工程师都应该知道的9种设计模式设计模式对于 web 开发人员来说非常重要,掌握它们可以让我们写出更好的代码。在本文中,我将使用 TypeScript 来介绍策略模式。注册和登录是Web应用程序中的重要功能。

专注于认知和效率提升方面的分享 1628

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 397

单例模式(TypeScript)

单例模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化; 单体模式的特点 该类只有一个实例 该类自行创建该实例(在该类内部创建自身的实例对象) 向整个系统公开这个实例接口 单体模式的两种创建方式(TypeScript) 首先我们定义单体模式需要实现的接口 /* i-car-shop.ts */ export interface IC

雪野Solye的博客 2267

【processing】创意编程

首先接到这个作业的时候,我是很崩溃的,我是真的不会画画QAQ,还画自己,这也太难了,于是我决定!还是祸害我爱豆吧!于是我从微博太太那里找了个图临摹 下面是太太的图 先给太太道歉!都是为了作业! 然后我画出来是这样子的 还可以!!!没有特别丑!(虽然也不是特别像吧) 但是画这个真是画死我了,下面贴上代码吧,没啥特殊的就是各种贝塞尔曲线各种圆各种线 //face stroke(70,27,11...

qq_25700571的博客 1267

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 890

基于ADS122U04与RA4M1的高精度温度测量方案设计

模数转换器(ADC)是连接模拟传感器与数字处理器的核心器件,其分辨率与噪声性能直接决定测量系统的精度上限。ΔΣ架构通过过采样与噪声整形,在低速高精度场景中具备显著优势,配合可编程增益放大器(PGA)可有效放大热电偶、RTD等传感器的微弱信号。在工业与HVAC温度测量中,24位ADC与MCU的协同设计能实现±0.1°C级精度,覆盖冷库监控、楼宇自控、工业炉温采集等场景。本文以ADS122U04IPWR与R7FA4M1AB3CFM为例,深入解析高精度温度测量方案的设计要点与工程实践。

weixin_34269583的博客 310

22、用户界面流程(UI Flow)全解析

本文全面解析了用户界面流程(UI Flow)的概念、创建步骤及其在系统设计中的应用。通过示例和操作步骤,详细介绍了如何确定屏幕范围、识别屏幕、创建过渡和标记触发器,并阐述了UI Flow在导航识别、验证、可用性优化、测试用例开发和需求推导中的重要作用。文章还结合问答系统案例,展示了UI Flow的实际应用价值,帮助读者深入理解并有效运用这一工具提升系统用户体验。

rice5的博客 153

javascript设计模式_前端工程师必须掌握的几个JavaScript设计模式及场景应用

作者 | 考拉海购前端团队链接 | https://juejin.im/post/59df4f74f265da430f311909设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案当然我们可以用一个通俗的说法:设计模式是解决某个特定场景下对某种问题的解决方案。因此,当我们遇到合适的场景时,我们可能会条件反射一样自然而然想到符合这种场景的设计模式。比如,当系统中某个...

weixin_39776344的博客 84

72、海洋地理信息系统:电子海图的全面解析

本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。

hhh00的博客 251

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaScript设计模式实战:单例、发布订阅与策略模式

设计模式是软件开发中解决特定问题的经典方案,通过抽象和封装提升代码复用性和可维护性。在JavaScript中,原型链和函数式特性让设计模式实现更轻量化。单例模式确保全局唯一实例,适用于配置管理和状态存储;发布订阅模式通过事件驱动实现组件解耦,是现代前端框架的核心机制;策略模式则支持运行时算法切换,常见于表单验证和业务规则处理。这些模式在Vuex、Redux等状态库以及电商促销系统中都有典型应用,结合ES6模块和TypeScript能进一步提升工程化质量。

weixin_29015483的博客 209

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

抽象类和接口实现

本文介绍了TypeScript中抽象类和接口实现的核心概念与应用。抽象类通过abstract关键字定义模板结构,强制子类实现特定成员,适合构建层次化设计;接口实现则通过implements关键字让类遵守契约,支持多重继承效果。文章展示了抽象类在模板方法模式中的应用,以及接口实现在策略模式中的价值,强调这些特性如何提升代码的模块化、可扩展性和类型安全性。通过具体代码示例,说明了如何平衡抽象与实现,避免过度设计,同时发挥面向对象编程的优势。这些机制是构建复杂TypeScript系统的重要工具。

zimin的专栏 1183

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

策略模式:解耦算法的艺术与实践

策略模式是一种行为型设计模式,其核心思想是将算法族封装成独立对象,使它们可以互相替换。这种模式通过组合而非继承的方式,实现了算法与使用它的客户端解耦,特别适用于需要频繁切换算法的场景。在软件工程实践中,策略模式能有效消除复杂的条件判断语句,提升代码的可维护性和扩展性。典型应用包括电商促销系统、支付网关集成等业务场景,其中算法策略如满减、折扣等可以灵活配置和替换。结合工厂模式和Lambda表达式等现代语言特性,策略模式能进一步简化实现并提升性能。理解策略模式与状态模式、模板方法模式的区别,有助于在具体场景中选

weixin_42116058的博客 21

前端精读:设计模式之 Template Method 模版模式——固定算法骨架,让子类只改细节

Template Method(模版模式)属于行为型模式,核心思想是**在父类中定义算法的骨架,把可变步骤延迟到子类实现**。本文结合前端精读周刊[设计模式系列](https://link.gitcode.com/i/7d955701d2faee3830536799c6b95527)的实践视角,先用模版文件、实例化、Vue 模版三个生活化例子建立直觉,再给出 TypeScript 可运行示例、结构

gitblog_00407的博客 153

面向对象编程核心原理与实战应用解析

面向对象编程(OOP)是一种通过对象模型抽象现实世界的编程范式,其三大核心特性封装、继承和多态构成了现代软件工程的基石。封装通过访问控制实现数据保护,继承建立类之间的层次关系,多态则支持接口的多种实现方式。这些特性在电商系统、支付网关等实际业务场景中展现出强大的工程价值,特别是在处理复杂业务逻辑和系统扩展时。设计模式如策略模式、观察者模式等进一步提升了代码的可维护性,而领域驱动设计(DDD)则将对象思维提升到架构层面。随着Kotlin、TypeScript等现代语言的演进,OOP与函数式编程的融合成为新趋势

weixin_42556197的博客 168

桥接模式:解耦抽象与实现的设计艺术

设计模式中的桥接模式(Bridge Pattern)是一种结构型模式,通过将抽象部分与其实现部分分离,使两者可以独立变化。这种分离不仅解决了类爆炸问题,还提升了系统的扩展性和维护性。在软件工程实践中,桥接模式常用于处理多维度变化的场景,如跨平台UI开发、支付系统架构等。其核心价值在于通过组合代替继承,实现抽象层与实现层的解耦。典型应用包括电商支付渠道切换、数据库中间件设计等场景,其中热词'解耦'和'组合'体现了模式的核心思想。掌握桥接模式能有效应对复杂系统中变化维度的管理挑战。

weixin_33428613的博客 224

TypeScript实现设计模式——策略模式

策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。——《大话设计模式》

Mengyu的博客 519

TypeScript设计模式实战:策略模式与外观模式的完美组合

在当今复杂的软件开发环境中,设计模式已成为提升代码质量和可维护性的关键工具。本文将深入探讨TypeScript中**策略模式**与**外观模式**的协同应用,帮助开发者构建更加灵活和易于维护的系统架构。 ## 策略模式:灵活算法的动态切换 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择不同的算法或策略。这种模式特别适用于需要根据不同条件执行不同处理逻辑的场

gitblog_00259的博客 1112

typescript中的策略模式

typescript中的策略模式

qq_42880714的博客 471

TypeScript设计模式在区块链智能合约中的终极应用指南

区块链智能合约开发需要高度的可靠性和安全性,而TypeScript设计模式正是实现这一目标的完美工具。本指南将带你了解如何利用23种经典设计模式来构建更健壮、更可维护的智能合约系统。🚀 ## 为什么选择TypeScript设计模式构建智能合约? 在区块链开发中,智能合约一旦部署就无法修改,这意味着代码质量至关重要。TypeScript提供了静态类型检查,而设计模式则提供了经过验证的解决方案架

gitblog_00004的博客 1213

TypeScript设计模式实战指南:策略模式与组合模式的终极应用

TypeScript设计模式实战指南为开发者提供了使用TypeScript实现设计模式的完整方案,其中策略模式和组合模式是提升代码灵活性与可维护性的重要工具。本指南将通过实例讲解如何在实际项目中应用这两种模式,帮助开发者构建更优雅的代码架构。 ## 策略模式:动态切换算法的终极方案 🚀 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。这种模式让算法的变化独立于使用算法的客

gitblog_00884的博客 1130
上一篇: 设计模式在 TypeScript 中的应用 - 单例模式
下一篇: 设计模式在 TypeScript 中的应用 - 观察者模式
三毛丶
博客等级 码龄10年 9粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值