定义:是指定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户。
可以避免多重分支的if else 语句和 switch语句
适用场景:
- 假如系统中有很多类,而他们的区别仅仅在于他们的行为不同。
- 一个系统需要动态的在几种算法中选择一种。
优点:
- 策略模式符合开闭原则
- 避免使用多重 条件转移语句,如if..else..语句、switch语句
- 使用策略模式可以提高算法的保密性和安全性
例如 以支付为例:
我们有支付宝支付,微信支付,京东白条,银联支付,他们的行为不同但是结果一样,都是付账
所以我们可以使用策略模式选择不用的支付方式
首先我们可以将将他们的共同点抽象出来,建立支付抽象类
支付结果返回类:
接下来我们建立不同的支付方式,
现在我们有了支付方式,那么我们现在就要有选择支付方式的策略
接下来,我们肯定需要通过下订单后来选择支付方式:
这里我们简单写一下 一个订单类 有一个支付方法
我们可以测试一下:
在spring 中,也用到了大量的策略模式:InstantiationStragegy这个是选择Bean初始化的类
总结:
通过策略模式我们就不需要写if else方式 来选择不同的支付方式,并且也易于维护后续需求,我们只需要传输不同的支付方式就行了。