1. 什么是策略模式
相同事情,选择不同方式实现。解决多重if判断问题
2. 包含元素
- 抽象策略:通常由接口/抽象类实现。 包含所有具体策略所需接口
- 具体策略:不同方式 各自真正实现地方。 包含相关算法或行为
- 策略容器: 包含所有具体策略 可以用map收集 工厂模式实现
备注:spring 框架可以通过ioc自动注入,在具体策略使用注解:@Component 直接通过工具类ApplicationContext 通过beanid 获取具体类。不再通过map手动收集 - 环境(Context上下文引用):对不同策略进行调用
3. 优点
- 解决多重if判断问题
- 扩展性好 可自由添加取消具体策略类 而不影响整个功能
- 不同策略 具体实现方式可自由切换
4缺点
策略类数量增多(每一个策略类复用性很小,如果需要增加算法,就只能新增类)
所有的策略类都需要对外暴露(使用的人必须了解使用策略,这个就需要其它模式来补充,比如工厂模式、代理模式)
后期维护不同策略类是非常多、定义类比较多、代码量增大。
5.策略模式应用场景
1.联合登录 QQ联合登录/微信联合登录/钉钉联合登录
2.排序算法 冒泡/简单选择/堆排序等
3.支付方式 支付宝/微信支付/银联支付/平安支付等 聚合支付平台
4.快递 申通、圆通、京东、德邦、顺丰等
5.发送通知 短信、微信公众号模板、钉钉通知、邮件
6.IOC结合数据库
IOC结合到数据库表结构存放我们策略可以动态的形式开启或者关闭策略。
策略模式中最核心 容器(map集合) map集合底层简化了我们多重if判断 在通过多态策略
找到具体实现类方法调用。
在spring项目中我们是没有必要单独定义我们容器 因为spring ioc 自带容器。