前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-策略模式】

【设计模式-策略模式】

作者头像
Liusy
发布2020-09-01 16:25:53
3860
发布2020-09-01 16:25:53
举报
文章被收录于专栏:Liusy01Liusy01

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

一、定义

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

二、实例

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

策略:

代码语言:javascript
复制
//抽象的策略对象
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("满减促销");
    }
}

活动:

代码语言:javascript
复制
//促销活动
public class PromotionActivity {
    //包含策略的引用
    private PromotionStrategy promotionStrategy;

    public PromotionActivity(PromotionStrategy promotionStrategy) {
        this.promotionStrategy = promotionStrategy;
    }

    //执行策略的方法 
    public void executePromotionStrategy(){
        promotionStrategy.doPromotion();
    }

}

测试类:

代码语言:javascript
复制
public static void main(String[] args) {
        //定义一个满减策略
        PromotionActivity promotionActivity = 
            new PromotionActivity(new ManJianPromotionStrategy());
        promotionActivity.executePromotionStrategy();
    }

运行结果:

类图:

三、源码实例

(1)线程池创建的时候会有四种拒绝策略可以选择。

四种分别是:

AbortPolicy:直接抛异常策略

CallerRunsPolicy:调用者策略,将任务返回给调用者执行

DiscardOldestPolicy:直接丢弃等待时间最长的线程策略

DiscardPolicy:直接丢弃线程策略

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档