Java 杂谈程序员设计模式

设计模式实战-策略模式(Strategy Pattern)

2019-01-16  本文已影响165人  紫霞等了至尊宝五百年

0 联系我


1.Q群【Java开发技术交流】:https://jq.qq.com/?_wv=1027&k=5UB4P1T
2.完整博客链接:www.shishusheng.com
3.知乎:http://www.zhihu.com/people/shi-shu-sheng-
4.gayhub:https://github.com/Wasabi1234

0.0 相关源码链接

https://github.com/Wasabi1234/design-patterns

1 定义


也叫做政策模式(Policy Pattern)

运行时(非编译时)改变软件的算法行为

策略模式的通用类图

策略模式使用的就是面向对象的继承和多态机制

策略模式的三个角色
● Context 封装角色
也叫做上下文角色,起承上启下封装作用;
屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化.

● Strategy抽象策略角色
策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性

● ConcreteStrategy具体策略角色
实现抽象策略中的操作,含有具体的算法

通用源码

2 适用场景

针对一个对象,其行为有些是固定的不变的,有些是容易变化的,针对不同情况有不同的表现形式。那么对于这些容易变化的行为,我们不希望将其实现绑定在对象中,而是希望以动态的形式,针对不同情况产生不同的应对策略。那么这个时候就要用到策略模式了。简言之,策略模式就是为了应对对象中复杂多变的行为而产生的。

3 优点

4 缺点

5 相关设计模式的差异

策略模式和工厂模式

策略模式和状态模式

6 实战






image.png

改造后的测试类



可见 if/else 语句过多,采取策略+工厂模式结合

7 源码应用解析

JDK中的比较器接口

JDK中的TreeMap

类似于促销活动中有促销策略对象,在T reeMap 中也有比较器对象



compare 方法进步加工


Spring 中的Resource

不同访问策略


Spring 中bean 的初始化ceInstantiationStrategy

上一篇下一篇

猜你喜欢

热点阅读