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

策略模式 Strategy Pattern

作者头像
FoamValue
发布2020-11-06 13:17:37
2840
发布2020-11-06 13:17:37
举报
文章被收录于专栏:FoamValueFoamValue

Strategy Pattern,是 Java 常用的设计模式之一。它提供了一个类的行为或其算法在运行时可以更改的能力。

它的结构

  • 环境角色,持有一个策略引用。
  • 抽象策略角色,与业务逻辑无关,是具体策略角色必须实现的接口或继承的父类。
  • 具体策略角色,包装了相关算法或行为。

一个简单的演示

演示代码

代码语言:javascript
复制
// 抽象策略角色
public interface SaleStrategy {
    double getRetailPrice(double tagPrice);
}
// 具体策略角色
public class PublicSaleStrategy implements SaleStrategy {
    @Override
    public double getRetailPrice(double tagPrice) {
        return tagPrice * 0.95D;
    }
}
public class SuperSaleStrategy implements SaleStrategy {
    @Override
    public double getRetailPrice(double tagPrice) {
        return tagPrice * 0.88D;
    }
}
public class BossStrategy implements SaleStrategy {
    @Override
    public double getRetailPrice(double tagPrice) {
        return tagPrice * 0.80D;
    }
}
// 环境角色
public class CarShop {
    private SaleStrategy saleStrategy;
    private double tagPrice = 100000.00D;
    public CarShop(SaleStrategy saleStrategy) {
        this.saleStrategy = saleStrategy;
    }
    public void getPrice() {
        System.out.println(saleStrategy.getRetailPrice(tagPrice));
    }
}
// 测试类
public class CarShopTest {
    @org.junit.Test
    public void getPrice() {
        SaleStrategy strategy = new PublicSaleStrategy();
        CarShop car = new CarShop(strategy);
        car.getPrice();
        strategy = new SuperSaleStrategy();
        car = new CarShop(strategy);
        car.getPrice();
        strategy = new BossStrategy();
        car = new CarShop(strategy);
        car.getPrice();
    }
}

运行结果

总结

策略模式改变的是行为,在实际开发中经常会遇到类似的实现。例如,Jedis 的单机、线程池与集群模式。

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

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

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

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

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