设计模式——策略模式

目录

一、是什么

二、实现方式

三、应用场景

四、总结


一、是什么

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

/*

希望对你有帮助!

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

*/

相关推荐
likerhood2 小时前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
AI大法师2 小时前
从 Adobe 焕新看品牌系统升级:Logo、主色、字体与产品体验如何重新对齐
大数据·人工智能·adobe·设计模式
贵慜_Derek2 小时前
《从零实现 Agent 系统》连载 03|控制循环:感知—决策—行动—反思
人工智能·设计模式·架构
nnsix3 小时前
设计模式 - 原型模式 笔记
笔记·设计模式·原型模式
nnsix3 小时前
设计模式 - 适配器模式 笔记
笔记·设计模式·适配器模式
asdfg12589634 小时前
一文理解软件开发中的“设计模式”
java·设计模式·软件开发
云飞云共享云桌面4 小时前
SolidWorks 服务器通过云飞云共享云桌面10人研发共享方案
运维·服务器·3d·设计模式·电脑
蜡笔小马5 小时前
12.C++设计模式-模板方法模式
c++·设计模式·模板方法模式
雪度娃娃5 小时前
行为型设计模式——备忘录模式
服务器·c++·设计模式·备忘录模式
皮卡祺q5 小时前
【抽奖系统-0】Redis 缓存与 RabbitMQ 削峰实战;架构梳理
设计模式