【设计模式】-策略模式:优雅处理条件逻辑

这篇具有很好参考价值的文章主要介绍了【设计模式】-策略模式:优雅处理条件逻辑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 策略模式之优雅处理条件逻辑

前言

在软件开发中,我们经常会遇到根据不同的条件执行不同逻辑的情况。这时,策略模式是一种常用的设计模式,能够使代码结构清晰、易于扩展和维护。

本文将详细介绍策略模式的概念及其在Java中的应用,通过代码示例演示如何使用策略模式来处理条件逻辑,以达到代码设计的灵活性和可维护性。

什么是策略模式?

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时根据不同的条件选择不同的算法或行为。它将每个条件分支的逻辑封装在一个独立的类中,使得它们可以独立变化,互不影响。

策略模式使用了面向对象的封装、继承和多态等特性,使得代码具备高内聚低耦合的特点。通过将条件逻辑的变化封装到策略类中,不仅可以简化代码的编写,还能提高代码的可维护性、可扩展性和可重用性。

实现原理

策略模式实现原理主要涉及以下几个部分:

  1. 策略接口(Strategy Interface):定义了各个策略类必须实现的方法。这个接口将算法逻辑进行抽象,并定义了统一的方法或行为。

  2. 策略类(Concrete Strategies)实现(implements)策略接口,并封装了具体的算法逻辑。每个具体策略类都是独立的且具体逻辑互相隔离,分别实现不同的算法。

  3. 上下文类(Context):包含一个策略接口成员变量,并在运行时根据需要使用具体的策略类。上下文类通过策略接口与具体的策略类进行交互,并调用策略类中定义的算法。上下文主要用于决定使用哪个策略类

使用策略模式的关键在于上下文类与策略类之间的耦合解耦。上下文类通过策略接口具体的策略类进行交互,而不是直接依赖于具体的策略类。这样,在需要更换或增加新的策略时,只需要修改上下文类的代码,而不需要修改客户端的代码,从而实现了代码的灵活性和可扩展性。

示例:支付系统中的策略模式

假设我们正在开发一个支付系统,其中有多种支付方式,包括现金支付、信用卡支付和支付宝支付。不同的支付方式计算价格的逻辑可能有所不同,我们可以使用策略模式来实现这一需求。

首先,我们定义一个策略接口PaymentStrategy,它声明了一个名为calculatePrice的方法用于计算价格:

1.定义策略接口

// 定义策略接口
public interface PaymentStrategy {
    double calculatePrice(double price);
}

2.定义策略类,实现PaymentStrategy接口的方法:

// 策略类:使用现金支付
public class CashPaymentStrategy implements PaymentStrategy {
    @Override
    public double calculatePrice(double price) {
        // 这里是现金支付的价格计算逻辑
        return price * 0.9; // 打9折
    }
}

// 策略类:使用信用卡支付
public class CreditCardPaymentStrategy implements PaymentStrategy {
    @Override
    public double calculatePrice(double price) {
        // 这里是信用卡支付的价格计算逻辑
        return price * 1.2; // 加收20%手续费
    }
}

// 策略类:使用支付宝支付
public class AlipayPaymentStrategy implements PaymentStrategy {
    @Override
    public double calculatePrice(double price) {
        // 这里是支付宝支付的价格计算逻辑
        return price * 0.95; // 打95折
    }
}

3.接下来,我们创建一个上下文类PaymentContext,用于将不同的策略类进行封装,外部调用时只需关注该上下文类:

// 上下文类
public class PaymentContext {
    private PaymentStrategy paymentStrategy;
    
    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
    
    public double calculate(double price) {
        return paymentStrategy.calculatePrice(price);
    }
}

4.最后,我们可以通过实例化不同的策略类对象,并将其传入PaymentContext中,然后调用calculate方法进行价格计算:

public class Main {
    public static void main(String[] args) {
        PaymentStrategy cashPayment = new CashPaymentStrategy();

        PaymentContext cashPaymentContext = new PaymentContext(cashPayment);
        double cashPrice = cashPaymentContext.calculate(100.0);
        System.out.println("现金支付价格:" + cashPrice);

        PaymentStrategy creditCardPayment = new CreditCardPaymentStrategy();
        PaymentContext creditCardPaymentContext = new PaymentContext(creditCardPayment);
        double creditCardPrice = creditCardPaymentContext.calculate(100.0);
        System.out.println("信用卡支付价格:" + creditCardPrice);

        PaymentStrategy alipayPayment = new AlipayPaymentStrategy();
        PaymentContext alipayPaymentContext = new PaymentContext(alipayPayment);
        double alipayPrice = alipayPaymentContext.calculate(100.0);
        System.out.println("支付宝支付价格:" + alipayPrice);
    }
}

运行上述代码可以得到如下输出:

现金支付价格:90.0
信用卡支付价格:120.0
支付宝支付价格:95.0

在以上示例中,我们定义了三种不同的支付策略:现金支付信用卡支付支付宝支付,它们分别实现了PaymentStrategy接口并实现了自己的价格计算逻辑。通过创建PaymentContext对象并传入不同的支付策略,我们可以调用calculate方法获得相应的价格结果。

总结

        通过策略模式,我们可以优雅地处理条件逻辑,将各个条件分支的逻辑封装到独立的策略类中,使得代码结构清晰、易于扩展和维护。

        策略模式适用于需求中存在多个条件分支,并且这些条件分支的逻辑会随时变化的情况。使用策略模式能够提高代码的可读性和可维护性,同时也符合面向对象设计原则中的开闭原则。

        在实际开发中,我们可以根据具体需求灵活运用策略模式,帮助我们构建出高质量、易于维护的代码。

参考资料:

  • 《Head First 设计模式》文章来源地址https://www.toymoban.com/news/detail-637401.html

到了这里,关于【设计模式】-策略模式:优雅处理条件逻辑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [设计模式]行为型模式-策略模式

    策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法的变换不会影响使用算法的客户。 在项目开发中,我们经常要根据不同的场景,采取不同的措施,也就是不同的策略。假设我们需要对a、b这两个整数进行计算,根据条件的不同,需要执行不

    2024年02月19日
    浏览(47)
  • 设计模式:策略模式

    策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时根据不同的情况选择不同的算法或行为。策略模式通过将算法封装成独立的策略类,使得它们可以互相替换,而不影响客户端的使用。 在策略模式中,有三个核心组件: 策略接口(Strategy Interface):定义了策

    2024年02月07日
    浏览(42)
  • 设计模式——策略模式

    定义: 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把便用算法的责任和算法的实现分割开来,并委派给不算法进象行管理。 主要角色如下: 示例: 假定现在需要

    2024年02月22日
    浏览(38)
  • 设计模式之策略模式

    策略设计模式(Strategy Pattern)是一种行为设计模式,它允许在运行时选择算法的行为。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。这种模式使算法的变化独立于使用算法的客户端。 概念 在策略模式中,有以下几个关键组成部分: 策略接口(

    2024年01月23日
    浏览(50)
  • 【设计模式】4、策略模式

    策略模式是一种行为设计模式,它能定义一系列算法,把每种算法分别放入独立的类中,以是算法的对象能相互替换。 一天, 你打算为游客们创建一款导游程序。 该程序的核心功能是提供美观的地图, 以帮助用户在任何城市中快速定位。 用户期待的程序新功能是自动路线

    2024年02月20日
    浏览(46)
  • 设计模式-策略模式

    策略模式是一种行为型设计模式,它允许在运行时动态改变对象的行为。在策略模式中,算法被封装在独立的策略类中,使得它们可以互换使用。下面是一个简单的例子: 假设我们有一个计算税收的系统,现在需要计算不同类型的商品的税收,例如书籍、食品和服装。每种商

    2024年02月15日
    浏览(48)
  • 设计模式—策略模式

    目录 一、定义 二、特点 三、优点 四、缺点 五、实例 六.涉及到的知识点 1、一个类里面有哪些东西? 2、类和实例 什么是类? 什么是实例? 什么是实例化? 3、字段和属性 什么是字段? 属性是什么? 属性怎么用呢? 属性有什么作用? 静态属性是什么? 属性和字段的公有

    2024年02月10日
    浏览(52)
  • 《设计模式》策略模式

    定义 : 又叫作 政策模式,将定义的一系列算法封装起来,使得它们之间可以互相替换,从而让算法的变化不影响到使用算法的用户 。 属于 行为型 模式。 策略模式的组成角色 : 环境类(Context) : 环境类是使用算法的角色 ,用来操作策略的上下文环境,屏蔽高层模块(客户

    2024年02月01日
    浏览(44)
  • 设计模式--策略模式

    目录 一.场景 1.1场景 2.2 何时使用  2.3个人理解 二. 业务场景练习  2.1业务: 2.2具体实现 2.3思路   三.总结 3.1策略模式的特点:  3.2策略模式优点 3.3策略模式缺点 1.1场景 许多相关的类仅仅是行为有异,也就是说业务代码需要根据场景不同,切换不同的实现逻辑 一个类定义了

    2024年02月13日
    浏览(40)
  • 【设计模式】 策略模式

    策略模式 (Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让客户端代码和算法的具体实现解耦。这样,客户端可以根据不同的需求选择不同的算法,而无需修改原有的代码。 灵活性增强 :策略模式使得算法独立于

    2024年02月14日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包