策略模式
定义:
定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户
if...else...
类型:行为型
系统有很多类,而他们的区别仅仅在于他们的行为不同
一个系统需要动态地在几种算法中选择一种
优点:
开闭原则
避免使用多重条件转移语句
提高算法的保密性和安全性
缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
产生很多策略类
相关设计模式:
策略模式和工厂模式
策略模式和状态模式
coding:
业务场景:某培训机构对于一些vip课程进行促销
创建PromotionStrategy类
创建ManJianPromotionStrategy类
创建LiJianPromotionStrategy类
创建FanXianPromotionStrategy类
创建PromotionActivety类
查看当前UML类图
创建Test类
运行
增进版策略模式
运行结果:
为了消除这里面的if..else...
我们继续增强:
集合工厂模式:
创建PromotionStrategyFactory类
对于我们项目写的代码来说,返回一个null容易 导致空指针异常
因此创建一个EmptyPromotionStrategy
修改之前的代码,返回一个EmptyPromotionStrategy
在PromotionStrategy中创建一个内部接口PromotionKey:
修改Test中main方法
JDK中的应用
类Comparator,而comparator就是一个策略接口
继承它的就是具体的策略
这里相当于与传入comparator这个类的子类来进行判断
Spring中的应用:
类Resource
它下面就有很多的时候,相当于Resource的具体策略
类Instantiationtrategy
它的具体实现策略:简单来说就是对bean的初始化有两个策略方式进行初始化