返回顶部
首页 > 资讯 > 后端开发 > Python >Java中策略设计模式的实现及应用场景
  • 414
分享到

Java中策略设计模式的实现及应用场景

Java策略设计模式Java设计模式Java策略模式 2023-05-17 14:05:31 414人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录介绍实现总结介绍 Java策略模式(Strategy Pattern)是一种行为设计模式,它允许再运行时动态选择算法的行为.策略模式通过将算法封装在可互换的策略对象中,使得客户端

介绍

Java策略模式(Strategy Pattern)是一种行为设计模式,它允许再运行时动态选择算法的行为.策略模式通过将算法封装在可互换的策略对象中,使得客户端代码能够轻松地切换算法,而无需修改原始代码.在策略模式中,每个算法都被实现为一个单独的策略类,这些策略类都实现了相同的接口,从而允许它们在运行时互相替换.

在Java中,可以使用接口或抽象类来定义策略接口.然后对于每个算法,都可以创建一个具体的实现类来实现这个接口.客户端代码可以通过将不同的策略对象传递给上下文对象来选择不同的算法.

Java策略模式通常包括以下三种角色:

  • Context(上下文):是策略模式中的核心类,用来管理具体策略实现类的创建,配置和执行,以及在运行时动态地选择具体的策略实现类.
  • Strategy(策略):是一个接口或抽象类,定义了策略实现类的通用方法和属性,具体策略实现类必须实现这些方法和属性.
  • ConcreteStrategy(具体策略):是策略接口的实现类,根据具体业务需求实现了策略接口定义的方法和属性.可以又多个具体策略实现类,Context类在运行时根据需要动态地选择具体的策略实现类.

实现

支付策略接口(Strategy)

public interface PaymentStrategy {
    
    void pay(double amount);
}

微信支付和支付宝支付(ConcreteStrategy)

public class WechatPayment implements PaymentStrategy {
    private String username;
    private String passWord;
    public WechatPayment(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    @Override
    public void pay(double amount) {
        System.out.println("微信支付:" + amount + "元");
    }
}
public class AliPayment implements PaymentStrategy{
    private String username;
    private String password;
    public AliPayment(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    @Override
    public void pay(double amount) {
        System.out.println("支付宝支付:" + amount + "元");
    }
}

购物车类(Context)

public class ShoppinGCart {
    private List<Item> itemList;
    private PaymentStrategy paymentStrategy;
    public ShoppingCart() {
        itemList = new ArrayList<>();
    }
    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
    public void addItem(Item item){
        itemList.add(item);
    }
    public void removeItem(Item item){
        itemList.remove(item);
    }
    public double calculateTotal(){
        return itemList.stream().mapToDouble(Item::getPrice).sum();
    }
    public void pay(){
        paymentStrategy.pay(calculateTotal());
    }
}

商品类

@Data
public class Item {
    private String name;
    private double price;
    public Item(String name, double price) {
        this.name = name;
        this.price = price;
    }
}

测试

public class Demo {
    public static void main(String[] args) {
        ShoppingCart shoppingCart = new ShoppingCart();
        Item item1 = new Item("item1",10);
        Item item2 = new Item("item2",10);
        shoppingCart.addItem(item1);
        shoppingCart.addItem(item2);
        shoppingCart.setPaymentStrategy(new AliPayment("aliPayUsername","aliPayPassword"));
        shoppingCart.pay();
        shoppingCart.setPaymentStrategy(new WechatPayment("wechatUsername","wechatPassword"));
        shoppingCart.pay();
    }
}

上面代码演示了一个简单的策略模式实现.我们定义了一个PaymentStrategy接口,它表示所有支付方式的共同操作.我们还定义了两个实现该接口的具体类AliPayment和WechatPayment,它们分别表示使用支付宝和微信支付的操作.我们还定义了一个ShoppingCart类,该类使用PaymentStrategy接口来表示支付方式,并根据需要切换实际的支付方式.

在我们的Demo类中,我们创建了一个ShoppingCart对象,并添加了两个Item对象,我们然后选择使用AliPayment进行支付,并调用pay()方法.我们接下来又选择使用WechatPayment进行支付,并再次调用pay()方法.

这样,我们就可以轻松地在不同的支付方式之间进行切换,并根据需要添加新的支付方式.

总结

优点

  • 容易扩展和维护:通过定义一个抽象的策略接口,可以方便地增加新的策略实现类,而不需要修改现有代码
  • 易于替换算法:在运行时可以动态地切换算法实现,无需修改客户端代码
  • 降低了耦合度:客户端只需要知道策略接口即可,不需要知道具体的策略实现类
  • 提高了复用性:不同的策略实现类可以在多个场景下复用

缺点

  • 增加了类的数量:为每个具体策略都定义了一个实现类,可能会增加类的数量.
  • 客户端必须知道策略接口:客户端需要知道具体的策略接口,才能正确使用策略实现类.
  • 运行时开销较大:在运行时,需要根据不同的策略实现类进行判断和选择,会带来一定的开销

应用场景

  • 有多个相似的类,只有行为有差异的情况下,可以考虑使用策略模式.
  • 需要在运行时动态切换算法的情况下,可以使用策略模式.
  • 一个系统需要在不同时间应用不同的业务规则情况下,可以使用策略模式
  • 在一个系统中,有许多类需要根据某种规则进行排序,查找等操作的情况下,可以使用策略模式.

到此这篇关于Java中策略设计模式的实现及应用场景的文章就介绍到这了,更多相关Java策略设计模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中策略设计模式的实现及应用场景

本文链接: https://lsjlt.com/news/211221.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中策略设计模式的实现及应用场景
    目录介绍实现总结介绍 Java策略模式(Strategy Pattern)是一种行为设计模式,它允许再运行时动态选择算法的行为.策略模式通过将算法封装在可互换的策略对象中,使得客户端...
    99+
    2023-05-17
    Java策略设计模式 Java设计模式 Java策略模式
  • Java设计模式中的策略模式如何实现
    这篇文章主要介绍了Java设计模式中的策略模式如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式中的策略模式如何实现文章都会有所收获,下面我们一起来看看吧。1 概述在平时开发中,往往会遇到这...
    99+
    2023-06-30
  • java策略设计模式怎么实现
    在Java中实现策略设计模式,可以按照如下步骤进行:1. 定义一个策略接口(或者抽象类),该接口包含多个具体策略类共同的方法。2. ...
    99+
    2023-08-31
    java
  • java设计模式之策略模式怎么实现
    这篇文章主要介绍了java设计模式之策略模式怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。策略模式:策略模式是一种定义一系列算法的方法,算法完成的工作都是相同的工作,...
    99+
    2023-05-31
    java
  • java设计模式的应用场景有哪些
    Java设计模式有很多应用场景,以下是一些常见的应用场景:1. 工厂模式:当需要根据不同的条件创建不同的对象时,可以使用工厂模式来统...
    99+
    2023-10-08
    java
  • Java适配器模式的实现及应用场景
    目录介绍实现总结优点缺点应用场景介绍 Java中的适配器模式是一种结构型设计模式,她将一个类的接口转换成另一个客户端所期望的接口.适配器模式让那些不兼容的类可以一起工作,它通过不兼容...
    99+
    2023-05-17
    Java适配器模式 Java设计模式 Java设计模式适配器模式
  • Java 设计模式中的策略模式详情
    目录策略模式的应用场景是否符合有没有必要不用策略模式例子使用策略模式策略上下文策略接口以及具体实现类Main类两种方式的不同策略模式有没有必要使用?如何避免Context类使用判断逻...
    99+
    2024-04-02
  • javascript设计模式中的策略模式怎么实现
    这篇文章主要讲解了“javascript设计模式中的策略模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript设计模式中的策略模式怎么实现”吧!一. 认识策略模式策略...
    99+
    2023-06-26
  • web前端中设计模式应用场景怎么实现
    今天就跟大家聊聊有关web前端中设计模式应用场景怎么实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.解释器模式对于一种语言,我们给出其文法表示...
    99+
    2024-04-02
  • Java中常用的设计模式之策略模式详解
    目录优点缺点使用场景一、实现方式1、订单类型枚举类2、订单处理接口3、普通订单处理器4、秒杀订单处理器5、拼团订单处理器6、下单管理器二、测试1、引入依赖2、测试用例总结优点 1.算...
    99+
    2024-04-02
  • Java设计模式之策略模式实例分析
    这篇文章主要介绍“Java设计模式之策略模式实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java设计模式之策略模式实例分析”文章能帮助大家解决问题。1.基本介绍1)策略模式(Strateg...
    99+
    2023-06-30
  • java设计模式的策略模式是什么
    这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是...
    99+
    2023-07-02
  • JAVA设计模式中的策略模式你了解吗
    目录策略模式策略模式是什么策略模式的使用场景策略模式实践总结策略模式 世界上本没有模式; 一些程序老鸟在长时间的编程工作总结出高效的代码写法被后世推崇; 并整理出固定的写法规范,这个...
    99+
    2024-04-02
  • java设计模式中策略模式的示例分析
    小编给大家分享一下java设计模式中策略模式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!策略模式策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实...
    99+
    2023-06-20
  • Java行为型设计模式之策略模式怎么实现
    本文小编为大家详细介绍“Java行为型设计模式之策略模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java行为型设计模式之策略模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.策略设计模...
    99+
    2023-07-04
  • 怎么理解Java设计模式的策略模式
    这篇文章主要讲解了“怎么理解Java设计模式的策略模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的策略模式”吧!一、什么是策略模式策略模式定义了一系列算法,并将每...
    99+
    2023-06-25
  • android设计模式的应用场景有哪些
    Android设计模式的应用场景有以下几个:1. MVC(Model-View-Controller)模式: 在Android中,M...
    99+
    2023-08-24
    android
  • PHP设计模式大全与应用场景
    面向对象编程的基本原则: 单一职责:一个类,只需要做好一件事情。 开放封闭:一个类,应该是可扩展的,而不可修改的。 依赖倒置:一个类,不应该强依赖另外一个类。每个类对于另外一个类都是可替换的。 配置化:尽可能的使用配置,而不是硬...
    99+
    2023-10-26
    设计模式 PHP设计模式
  • Python设计模式中的策略模式详解
    目录策略模式命令模式策略模式 策略模式是一个经典的模式,简化代码。 电商领域有个功能明细可以使用“策略”模式,就是根据客户的属性或订单中的商品计算折扣。 比如...
    99+
    2023-02-08
    Python策略模式 Python设计模式
  • spring使用策略模式如何实现多种场景登录方式
    这篇文章给大家介绍spring使用策略模式如何实现多种场景登录方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 @Autowired注解可以帮我们自动注入我们想要的 Bean。如果只是简单使用@Autowi...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作