大话设计模式——18.策略模式(Strategy Pattern)

这篇具有很好参考价值的文章主要介绍了大话设计模式——18.策略模式(Strategy Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

是一系列算法的封装,即做的事情相同(方法名称相同)但是实现的方式不同,以相同方式调用所有的算法,减少算法与使用算法的耦合。直接调用方法。

UML图

大话设计模式——18.策略模式(Strategy Pattern),# 行为型,设计模式,策略模式

应用场景
  • Java AWT中的LayoutManager(布局管理器)
  • 系统中存在多个类,它们的区别仅在于它们的行为
  • 不希望暴露复杂与算法有关的数据结构
  • Java中Comparator 接口常用的 compare()方法

示例

电商平台会经常进行商品优惠活动,对商品或订单价格进行改动

  1. 商品
public class Product {

    /**
     * 产品价格
     */
    private double price;

    /**
     * 产品名称
     */
    private String productName;

    public Product(double price, String productName) {
        this.price = price;
        this.productName = productName;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }
}
  1. 策略:活动优惠策略
public interface Strategy {

    /**
     * 计算商品价格
     *
     * @param product
     * @return
     */
    double computePrice(Product product);
}

没有活动:

public class NormalActivity implements Strategy {

    @Override
    public double computePrice(Product product) {
        return product.getPrice();
    }
}

打折活动:

public class DiscountActivity implements Strategy {

    private double discount;

    public DiscountActivity(double discount) {
        this.discount = discount;
    }

    @Override
    public double computePrice(Product product) {
        return product.getPrice() * discount;
    }
}

代金券活动:

public class VoucherActivity implements Strategy {

    /**
     * 代金券
     */
    private double voucher;


    public VoucherActivity(double voucher) {
        this.voucher = voucher;
    }

    @Override
    public double computePrice(Product product) {
        return product.getPrice() > voucher ? product.getPrice() - voucher : 0;
    }
}
  1. 活动上下文:选择适当的活动促销策略
public class PromotionContext {

    /**
     * 策略
     */
    private Strategy strategy;


    public PromotionContext(Strategy strategy) {
        this.strategy = strategy;
    }

    public double executeStrategy(Product product) {
        return this.strategy.computePrice(product);
    }
}
  1. 运行
public class Main {

    public static void main(String[] args) {

        // 创建商品
        Product phone = new Product(1999, "手机");

        // 促销策略
        PromotionContext promotionContext;

        // 原价
        promotionContext = new PromotionContext(new NormalActivity());
        System.out.println("原价:" + promotionContext.executeStrategy(phone));

        // 8折优惠
        promotionContext = new PromotionContext(new DiscountActivity(0.8));
        System.out.println("优惠价格:" + promotionContext.executeStrategy(phone));

        // 2000代金券
        promotionContext = new PromotionContext(new VoucherActivity(2000));
        System.out.println("券后价格:" + promotionContext.executeStrategy(phone));

    }
}

大话设计模式——18.策略模式(Strategy Pattern),# 行为型,设计模式,策略模式

总结

  • 优点:

    • 满足开闭原则,当增加具体策略时,不需要修改上下文代码
    • 避免使用过多的条件判断,过多的条件判断语句不利于系统可维护性,扩展性和灵活性
  • 缺点文章来源地址https://www.toymoban.com/news/detail-850282.html

    • 策略类可能过多可能导致膨胀,复用性较小

到了这里,关于大话设计模式——18.策略模式(Strategy Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大话设计模式——2.简单工厂模式(Simple Factory Pattern)

    定义:又称静态工厂方法,可以根据参数的不同返回不同类的实例,专门定义一个类(工厂类)来负责创建其他类的实例可通过类名直接调用,被创建的实例通常具有共同的父类。 UML图: 例子: 计算器中的加减乘除,可将不同的运算看成不同的对象,通过工厂类进行构建,

    2024年02月22日
    浏览(42)
  • 设计模式-策略模式 Strategy

    该模式最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。 策略模式,英文全称是 Strategy Design Pattern。该模式是这样定义的: Define a family of algorithms, encapsulate each one, and make

    2024年02月20日
    浏览(42)
  • Java设计模式之策略(Strategy)模式

    策略(Strategy)设计模式定义了一系列算法,将它们封装起来,并且可以相互替换使用,从而使得算法可以独立于使用它的客户而变化。 策略(Strategy)设计模式是一种行为型设计模式,它允许在运行时动态地选择算法。策略模式将算法封装为算法族,从而可以在运行时根据

    2024年02月15日
    浏览(49)
  • 【设计模式-03】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月22日
    浏览(41)
  • 【设计模式-02】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月16日
    浏览(45)
  • Java设计模式—策略模式(Strategy Mode)

    目录 前言 一、策略模式的简介 二、策略模式的概念 三、策略模式的作用 四、策略模式的优、缺点 策略模式的优点: 策略模式的缺点: 五、策略模式应用场景 六、代码案例 1)抽象接口类 2)具体的策略类:减 3)具体策略类:打折 4)上下文类 5)客户端Main代码测试 总结

    2024年02月08日
    浏览(43)
  • C++设计模式_04_Strategy 策略模式

    接上篇,本篇将会介绍C++设计模式中的 Strategy 策略模式 ,和上篇 模板方法Template Method 一样,仍属于“组件协作”模式,它与Template Method有着异曲同工之妙。 在软件构建过程中,某些对象使用的算法可能多种多样ÿ

    2024年02月09日
    浏览(39)
  • 【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    有各种鸭子,比如野鸭、北京鸭、水鸭等。 鸭子有各种行为,比如走路、叫、飞行等。不同鸭子的行为可能略有不同。要求显示鸭子的信息 不同的鸭子继承一个父类Duck,如果是相同的行为就继承,不同行为就重写方法 实现 【鸭子抽象类】 【野鸭】 【北京鸭】 【玩具鸭】

    2024年02月12日
    浏览(55)
  • 策略模式(Strategy Pattern)

      在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护

    2024年02月05日
    浏览(34)
  • 策略模式【Strategy Pattern】

    刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子 的。 1 先说这个场景中的要素: 三个妙计 一个锦囊 一个赵云 妙计

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包