设计模式——策略模式

目录

一、是什么

二、实现方式

三、应用场景

四、总结


一、是什么

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

/*

希望对你有帮助!

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

*/

相关推荐
A-Jie-Y26 分钟前
JAVA设计模式-建造者模式
java·设计模式
无敌秋2 小时前
# C++ 工厂方法模式实战指南
开发语言·c++·设计模式
a里啊里啊2 小时前
软考-软件评测师:知识点整理(七)——软件工程
设计模式·软件工程·软考·uml·结构化开发·软件评测师·软件模型
ximu_polaris3 小时前
设计模式(C++)-行为型模式-策略模式
c++·设计模式·策略模式
geovindu4 小时前
go: Observer Pattern
开发语言·观察者模式·设计模式·golang
z小天才b1 天前
Java 设计模式完全指南:从入门到精通
java·开发语言·设计模式
kyriewen111 天前
Next.js:让你的React应用从“裸奔”到“穿衣服”
开发语言·前端·javascript·react.js·设计模式·ecmascript
A-Jie-Y1 天前
JAVA设计模式-工厂方法模式
java·设计模式
A-Jie-Y1 天前
JAVA设计模式-单例模式
java·设计模式
geovindu1 天前
go: Iterator Pattern
开发语言·设计模式·golang·迭代器模式