【设计模式-策略模式】

时间:2022-07-24
本文章向大家介绍【设计模式-策略模式】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

【导读】业务场景中,很多需要根据具体情况选择不同的处理方式,比如出行该选择何种交通方式,商场的活动的促销策略等。这就是策略模式。

一、定义

定义了算法家族,分别封装起来,让它们之间可以相互替换,算法的变化不会影响到使用算法的用户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

二、实例

就以商场促销策略为例,有满减策略、返现策略等。

策略:

//抽象的策略对象
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:直接丢弃线程策略