设计模式——策略模式

目录

一、是什么

二、实现方式

三、应用场景

四、总结


一、是什么

1.当有多个分支选择并且这些分支没有必然联系 时,可以使用策略模式。减少代码中的 if-else,switch-case (租房:可以选择嘉禾望岗,也可以选择 万顷沙,也可以选择珠江新城)

二、实现方式

1.通过 对象属性定义函数的方式来实现

2.具体实现:

javascript 复制代码
/**
 * 策略模式
 * 定义: 用户自己决定使用哪种策略,策略之间没有必然联系
 * 实现方式: 对象+函数
 * 应用场景: 表单验证、支付方式选择、算法选择等 有多种相似方式可以选择时 
 * 优点: 简化if-else,switch-case,易维护,易扩展
 */
const  RentingStrategyType=Object.freeze({
  /**嘉禾望岗 */
  JIA_HE_WANG_GANG:1,
  /**万顷沙 */
  WAN_QING_SHA:2,
  /**珠江新城 */
  ZHU_JIANG_XIN_CHENG:3
})
class RentingStrategy{

  strategies={
    [RentingStrategyType.JIA_HE_WANG_GANG]: (money)=>{
      console.log('嘉禾望岗租金',money*0.5)
      return money*0.5 
    },
    [RentingStrategyType.WAN_QING_SHA]: (money)=>{
      console.log('万顷沙租金',money*0.8)
      return money*0.8
    },
    [RentingStrategyType.ZHU_JIANG_XIN_CHENG]: (money)=>{
      console.log('珠江新城租金',money*2)
      return money*2
    }
  }
  strategy=RentingStrategyType.JIA_HE_WANG_GANG

  /** 设置策略 */
  setStrategy(strategy){
    this.strategy=strategy
  }
  /** 执行策略 */
  execute({strategy,money}){
   if(strategy){
    this.setStrategy(strategy)
   }
    return this.strategies[this.strategy](money)
  } 
}
const rentingStrategy=new RentingStrategy()
rentingStrategy.execute({money:2500})
rentingStrategy.execute({money:2500,strategy:RentingStrategyType.WAN_QING_SHA})
rentingStrategy.execute({money:2500,strategy:RentingStrategyType.ZHU_JIANG_XIN_CHENG})

三、应用场景

有>=3种以上没有关联的分支选择,可以考虑使用策略模式,简化if-else、switch-case,易于以后新增其他选择。

四、总结

1.策略模式不同的策略单独实现对应的方案不使用if-else,switch-case耦合在一起。

2.实现方式:枚举+对象属性定义成函数或者class实例/对象

3.应用场景:>=3个分支,并且分支处理的逻辑复杂

/*

希望对你有帮助!

如有错误,欢迎指正,谢谢!

*/

相关推荐
ttod_qzstudio12 小时前
【软考设计模式】原型模式:“克隆“对象与深拷贝、浅拷贝精讲
设计模式·原型模式
geovindu12 小时前
java: Builder Pattern
java·开发语言·后端·设计模式·建造者模式·生成器模式
researcher-Jiang1 天前
Design Patterns——Template Method入门到情景实战
python·设计模式·模板方法模式
在水一缸1 天前
拒绝被打扰:深度解析 macOS 进程守护与“反自动启动”攻防战
macos·策略模式·用户体验·进程守护·自动启动·系统权限
饼干哥哥1 天前
用Claude Code跑通跨境电商的5大场景,顶10个人的团队
人工智能·设计模式·正则表达式
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
杨运交1 天前
[045][Crypto模块]设计一个可扩展的加解密框架:策略模式与工厂模式实战
linux·运维·策略模式
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写一个饮品制作模板(附代码)
java·设计模式·行为型模式·模版方法模式·钩子方法·代码复用·编程实战
IT·陈寒1 天前
macOS 安装 Claude Code 全流程
人工智能·macos·策略模式
ttod_qzstudio2 天前
【软考设计模式】单例模式:唯一实例的管控与线程安全精讲
单例模式·设计模式