【导读】业务场景中,很多需要根据具体情况选择不同的处理方式,比如出行该选择何种交通方式,商场的活动的促销策略等。这就是策略模式。
一、定义
定义了算法家族,分别封装起来,让它们之间可以相互替换,算法的变化不会影响到使用算法的用户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
二、实例
就以商场促销策略为例,有满减策略、返现策略等。
策略:
//抽象的策略对象
public interface PromotionStrategy {
void doPromotion();
}
//具体的返现策略
public class FanXianPromotionStrategy implements PromotionStrategy {
@Override
public void doPromotion() {
System.out.println("返现促销");
}
}
//具体的满减策略
public class ManJianPromotionStrategy implements PromotionStrategy {
@Override
public void doPromotion() {
System.out.println("满减促销");
}
}
活动:
//促销活动
public class PromotionActivity {
//包含策略的引用
private PromotionStrategy promotionStrategy;
public PromotionActivity(PromotionStrategy promotionStrategy) {
this.promotionStrategy = promotionStrategy;
}
//执行策略的方法
public void executePromotionStrategy(){
promotionStrategy.doPromotion();
}
}
测试类:
public static void main(String[] args) {
//定义一个满减策略
PromotionActivity promotionActivity =
new PromotionActivity(new ManJianPromotionStrategy());
promotionActivity.executePromotionStrategy();
}
运行结果:
类图:
三、源码实例
(1)线程池创建的时候会有四种拒绝策略可以选择。
四种分别是:
AbortPolicy:直接抛异常策略
CallerRunsPolicy:调用者策略,将任务返回给调用者执行
DiscardOldestPolicy:直接丢弃等待时间最长的线程策略
DiscardPolicy:直接丢弃线程策略