Java设计模式—策略模式(Strategy Mode)

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

目录

前言

一、策略模式的简介

二、策略模式的概念

三、策略模式的作用

四、策略模式的优、缺点

策略模式的优点:

策略模式的缺点:

五、策略模式应用场景

六、代码案例

1)抽象接口类

2)具体的策略类:减

3)具体策略类:打折

4)上下文类

5)客户端Main代码测试

总结:


前言

在策略模式,我们通过定义一系列算法类,将每个算法封装到具有共同接口抽象类中,使得它们之间可以相互的替换;

一、策略模式的简介

策略模式(Strategy Mode)是一种行为型设计模式,它定义了算法家族,分别的封装起来,让它们之间可以相互替换;此模式让算法的变化,不会影响到使用算法的客户;这样做的好处是,当我们需要增加新的算法时,只需要添加一个新的算法类即可,而不需要修改原有的代码。

二、策略模式的概念

它定义了算法家族,分别封装起来,让它们之间可以相互替换。

三、策略模式的作用

策略模式的主要作用就是将算法的实现和客户端使用算法分离开来,使得算法变化而不影响客户端的代码;

策略模式的作用有以下几个方面:

  • 通过定义一系列算法类并封装到具有共同接口的抽象类中,我们可以在不修改原有代码的情况下轻松地切换算法,从而满足不同的业务需求;
  • 在没有使用策略模式的情况下,往往需要使用大量的条件语句来实现不同的业务逻辑,这样会使得代码变得复杂难以维护。而使用策略模式可以将不同的业务逻辑封装到不同的算法类中,从而避免了大量的条件语句;
  • 由于每个算法类都是独立的,因此可以在其他项目中重用这些算法类,从而提高代码的复用性;
  • 策略模式将算法的实现与使用算法的客户端代码分离开来,从而降低了它们之间的耦合度;

四、策略模式的优、缺点

策略模式的优点:

  • 可以方便地切换算法
  • 可以避免大量的条件语句
  • 可以提高代码的复用性
  • 可以降低耦合度

策略模式的缺点:

  • 策略模式的类过多:每次具体策略都要对应一个策略类,也就造成了类的数量增加,从而导致“类爆炸”;
  • 客户端必须了解所有的策略类:客户端使用策略类时,必须知道这个策略类的作用;
  • 策略模式的对象数量过多:每个策略类都是一个对象,当系统中存在大量的策略类时,会增加对象的数量,从而占用更多的内存空间;

五、策略模式应用场景

策略模式应用场景包括以下几个

  • 多选一的时候
  • 游戏角色:魔法师、大剑士、武士等等
  • 算法:加减乘除什么的
  • 还有一些就不一一写出来了

六、代码案例

注意:这里以商场打折、满减等为案例

1)抽象接口类

// 抽象策略类
public interface DiscountStrategy {
    double calculateDiscount(double price);
}

2)具体的策略类:减

// 具体策略类:满减
public class FullReduction implements DiscountStrategy {
    public double calculateDiscount(double price) {
        if (price >= 100) {
            return price - 20;
        }
        return price;
    }
}

3)具体策略类:打折

// 具体策略类:打折
public class Discount implements DiscountStrategy {
    public double calculateDiscount(double price) {
        return price * 0.8;
    }
}

4)上下文类


// 上下文类
public class Context {
    private DiscountStrategy discountStrategy;

    public void setDiscountStrategy(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }

    public double calculatePrice(double price) {
        return discountStrategy.calculateDiscount(price);
    }
}

5)客户端Main代码测试


// 客户端代码
public class StrategyPatternDemo {
    public static void main(String[] args) {
        Context context = new Context();
        
        // 使用满减策略
        context.setDiscountStrategy(new FullReduction());
        System.out.println("使用满减策略,总价为:" + context.calculatePrice(120));
        
        // 使用打折策略
        context.setDiscountStrategy(new Discount());
        System.out.println("使用打折策略,总价为:" + context.calculatePrice(120));
    }
}

测试结果:

使用满减策略,总价为:100.0

使用打折策略,总价为:96.0

总结:

策略模式是一种非常灵活和可扩展的设计模式,可以帮助我们更好地应对需求变化和提高代码质量文章来源地址https://www.toymoban.com/news/detail-474264.html

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

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

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

相关文章

  • 【设计模式-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日
    浏览(28)
  • 大话设计模式——18.策略模式(Strategy Pattern)

    简介 是一系列算法的封装,即做的事情相同(方法名称相同)但是实现的方式不同,以相同方式调用所有的算法,减少算法与使用算法的耦合。直接调用方法。 UML图 应用场景 Java AWT中的LayoutManager(布局管理器) 系统中存在多个类,它们的区别仅在于它们的行为 不希望暴露

    2024年04月13日
    浏览(33)
  • 设计模式二十二:策略模式(Strategy Pattern)

    定义一系列算法,将每个算法封装成独立的对象,并使这些对象可互相替换。这使得在运行时可以动态地选择算法,而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离,使得客户端可以根据需要灵活地选择和切换不同的算法,而不影响到客户

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

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

    2024年02月09日
    浏览(27)
  • Java设计模式——策略模式

    1. 策略模式简介 策略模式: 策略模式是一种行为型模式, 它将对象和行为分开, 将行为定义为一个行为接口和具体行为的实现 策略模式最大的特点是行为的变化, 行为之间可以相互替换 每个if判断都可以理解为一个策略. 本模式是的算法可独立于使用它的用户而变化 2. 模式结构

    2024年02月11日
    浏览(33)
  • java设计模式---策略模式

    策略设计模式是一种行为设计模式。当在处理一个业务时,有多种处理方式,并且需要再运行时决定使哪一种具体实现时,就会使用策略模式。 策略模式的类图: 在支付业务中,有三种付款方式,程序运行时使用哪种方式由用户选择,根据用户选择执行不同的逻辑。 首先,

    2024年02月10日
    浏览(30)
  • Java特性之设计模式【策略模式】

    概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法 主要解决 :在有多种

    2024年02月08日
    浏览(37)
  • Java设计模式之策略模式详解

    大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同踏入Java设计模式之策略模式的世界,探讨代码中的智慧抉择。 策略模式的核心思想 策略模式是一种行为型设计模式,它定义了算法家族

    2024年01月20日
    浏览(31)
  • Java设计模式——策略

    前言 策略模式是平时Java开发中常用的一种,虽然已有很多讲解设计模式的文章,但是这里还是写篇文章来从自己理解的角度讲解一下。 我们不妨进行场景假设,要对我们的软件进行授权管理:在启动我们的软件之前先要校验是否存在合法的授权,如果授权不合法则要求用户

    2024年02月20日
    浏览(28)
  • Java设计模式-策略模式-基于Spring实现

    策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它将算法封装在 独立的策略类 中,使得它们可以相互替换,而不影响客户端代码。这种模式通过 将算法的选择从客户端代码中分离出来 ,提供了更大的灵活性和可维护性。 在Java中,策略模式的设计理念可以

    2024年02月08日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包