1. 策略模式介绍

1.1 定义

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

百度上说: 指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。

1.2 角色组成

规则是死的,人是活的,我们应该灵活运用。什么环境角色,无所谓的。

  • 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
  • 具体策略角色:包装了相关的算法和行为。
  • 环境角色:持有一个策略类的引用,最终给客户端调用

1.3 应用场景

  • 1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
    • 比如:你支付,你可以用支付宝、微信、qq,那么这个就是 支付策略中的不同的实现方式。
  • 2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
  • 3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

2. 代码演示

2.1 场景介绍

比如我们买东西,有时候会有促销,比如促销策略有:优惠券优惠、返现优惠、或者熟人邀请码优惠(“????我瞎想的”)

那么这三个统称为促销策略。

2.2 不使用策略模式

2.2.1 代码

假设使用的mvc三层

  • Controller 类
    设计模式(5) -行为型模式之 - 策略模式

  • Service 类
    设计模式(5) -行为型模式之 - 策略模式

  • 调用类
    设计模式(5) -行为型模式之 - 策略模式

2.2.2 存在的问题

  1. 如果又增加了新的条件,那么在service类里面,还是要加 判断,加方法等。提高了复杂度,和维护难度
  2. 看起来也比较臃肿。不美观。哈哈

2.3 使用策略模式 + 工厂模式

2.3.1 类图

设计模式(5) -行为型模式之 - 策略模式

2.3.2 代码

其实最主要的还是这写个策略类,运用多态的原理实现。具体怎么用,可以灵活搭配吧,我个人认为。

  • 策略抽象类
    设计模式(5) -行为型模式之 - 策略模式

  • 促销策略的三个实现类
    设计模式(5) -行为型模式之 - 策略模式设计模式(5) -行为型模式之 - 策略模式

  • 获得对应策略的工厂类(解释看代码注释)

设计模式(5) -行为型模式之 - 策略模式

  • Service 类
    设计模式(5) -行为型模式之 - 策略模式

  • 测试类
    设计模式(5) -行为型模式之 - 策略模式

2.4 策略模式优缺点

优点:

1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性良好。

缺点:

1、策略类会增多(每一个策略,都需要一个类)。

2、所有策略类都需要对外暴露。

3. 总结

这次总结的不到位,很正常,因为我本身也没有 太理解这个模式。希望在以后的学习中,可以领悟到这个模式的精髓吧。。。。。

1、策略类会增多(每一个策略,都需要一个类)。

2、所有策略类都需要对外暴露。

3. 总结

这次总结的不到位,很正常,因为我本身也没有 太理解这个模式。希望在以后的学习中,可以领悟到这个模式的精髓吧。。。。。

相关文章:

  • 2022-01-04
  • 2021-12-06
  • 2021-07-03
  • 2021-11-23
  • 2022-12-23
  • 2021-10-21
  • 2021-12-23
  • 2022-01-27
猜你喜欢
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2022-01-25
  • 2022-12-23
  • 2021-07-16
  • 2021-08-24
相关资源
相似解决方案