设计模式——策略模式

目录

一、是什么

二、实现方式

三、应用场景

四、总结


一、是什么

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个分支,并且分支处理的逻辑复杂

/*

希望对你有帮助!

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

*/

相关推荐
福大大架构师每日一题1 天前
ollama v0.40.11发布:macOS原生语音生成上线,d3决策模型正式加入
macos·策略模式
是2的10次方啊1 天前
设计模式与生活⑤:天冷了,给电动车套件挡风被
设计模式
昭昭日月明2 天前
AI 时代的《重构》
设计模式·架构
工一木子2 天前
设计模式与生活③:你的早晨,是一套模板
设计模式
是2的10次方啊2 天前
设计模式与生活④:冰箱空了,早餐换个买法
设计模式
知守观2 天前
设计模式实战:从真实老项目中看标准模板方法与工厂的落地
java·spring·设计模式
多弗朗皮卡丘3 天前
C++特殊类设计
开发语言·c++·设计模式
Carl_奕然3 天前
【智能体】Loop 的四种设计模式之:Verification Loop(2026 最新版)
人工智能·python·设计模式
是2的10次方啊3 天前
设计模式与生活③:你的早晨,是一套模板
设计模式
.Hypocritical.4 天前
JUC + 三大设计模式(单例、工厂、代理)
设计模式·juc·1024程序员节