广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java设计模式之策略模式案例详解
  • 196
分享到

Java设计模式之策略模式案例详解

2024-04-02 19:04:59 196人浏览 独家记忆

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

摘要

目录优缺点spring中哪里使用策略模式策略模式设计图代码案例为什么使用策略模式? 答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可

为什么使用策略模式?

答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可维护性、可扩展性和可读性。

优缺点

优点

  • 算法可以自由切换(高层屏蔽算法,角色自由切换)。
  • 避免使用多重条件判断(如果算法过多就会出现很多种相同的判断,很难维护)
  • 扩展性好(可自由添加取消算法而不影响整个功能)。

缺点

策略类数量增多(每一个策略类复用性很小,如果需要增加算法,就只能新增类)。所有的策略类都需要对外暴露(使用的人必须了解使用策略,这个就需要其它模式来补充,比如工厂模式、代理模式)。

Spring中哪里使用策略模式

ClassPathXmlApplicationContext Spring 底层Resource接口采用策略模式

Spring 为Resource 接口提供了如下实现类:

  • UrlResource:访问网络资源的实现类。
  • ClassPathResource:访问类加载路径里资源的实现类。
  • FileSystemResource:访问文件系统里资源的实现类。
  • ServletContextResource:访问相对于ServletContext 路径里的资源的实现类
  • InputStreamResource:访问输入流资源的实现类。
  • ByteArrayResource:访问字节数组资源的实现类。

策略模式设计图

  • Strategy::策略接口或者策略抽象类,并且策略执行的接口
  • ConcreateStrategyA、 B、C等:实现策略接口的具体策略类
  • Context::上下文类,持有具体策略类的实例,并负责调用相关的算法

代码案例

统一支付接口

public interface Payment {
    
    String getPayType();
    
    String pay(String order);
}

各种支付方式(策略)

@Component
public class AlipayPayment implements Payment {
    @Override
    public String getPayType() {
        return "alipay";
    }
    @Override
    public String pay(String order) {
        //调用阿里支付
        System.out.println("调用阿里支付");
        return "success";
    }
}
@Component
public class BankCardPayment implements Payment {
    @Override
    public String getPayType() {
        return "bankCard";
    }
    @Override
    public String pay(String order) {
        //调用微信支付
        System.out.println("调用银行卡支付");
        return "success";
    }
}
@Component
public class WxPayment implements Payment {
    @Override
    public String getPayType() {
        return "weixin";
    }
    @Override
    public String pay(String order) {
        //调用微信支付
        System.out.println("调用微信支付");
        return "success";
    }
}

使用工厂模式来创建策略

public class PaymentFactory {
    private static final Map<String, Payment> payStrategies = new HashMap<>();
    static {
        payStrategies.put("weixin", new WxPayment());
        payStrategies.put("alipay", new AlipayPayment());
        payStrategies.put("bankCard", new BankCardPayment());
    }
    public static Payment getPayment(String payType) {
        if (payType == null) {
            throw new IllegalArgumentException("pay type is empty.");
        }
        if (!payStrategies.containsKey(payType)) {
            throw new IllegalArgumentException("pay type not supported.");
        }
        return payStrategies.get(payType);
    }
}

测试

public class Test {
    public static void main(String[] args) {
        String payType = "weixin";
        Payment payment = PaymentFactory.getPayment(payType);
        String pay = payment.pay("");
        System.out.println(pay);
    }
}

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

--结束END--

本文标题: Java设计模式之策略模式案例详解

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式之策略模式案例详解
    目录优缺点Spring中哪里使用策略模式策略模式设计图代码案例为什么使用策略模式 答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可维...
    99+
    2022-11-13
  • Java设计模式之策略模式示例详解
    目录定义结构UML类图UML序列图深入理解策略模式策略和上下文的关系策略模式在JDK中的应用该策略接口有四个实现类策略模式的优点策略模式的缺点策略模式的本质在讲策略模式之前,我们先看...
    99+
    2022-11-13
  • Java设计模式之java策略模式详解
    目录为什么使用策略模式?策略模式包含角色策略模式的类图排序案例策略模式的优点策略模式的缺点适用场景源码分析策略模式的典型应用Java Comparator 中的策略模式参考文...
    99+
    2022-11-12
  • java设计模式--策略模式详解
    目录策略模式Demo代码:总结策略模式 策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来...
    99+
    2022-11-12
  • JavaScript设计模式之策略模式详解
    什么是设计模式?为什么需要学习设计模式? 学习设计模式的目的是:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络...
    99+
    2022-11-13
  • Java设计模式之策略模式
    在一个收银系统中,如果普通用户、中级会员、高级会员分别对应着不同的优惠策略,常规编程就要使用一系列的判断语句,判断用户类型,这种情况下就可以使用策略模式。 一、概念理解 策略模式的概...
    99+
    2022-11-13
    Java 设计模式 策略模式
  • java设计模式策略模式图文示例详解
    目录策略模式意图问题解决方案真实世界类比策略模式结构伪代码策略模式适合应用场景实现方式策略模式优缺点策略模式优缺点与其他模式的关系策略模式 亦称:Strategy 意图 策略模式是一...
    99+
    2022-11-13
  • Java设计模式之策略模式实例分析
    这篇文章主要介绍“Java设计模式之策略模式实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java设计模式之策略模式实例分析”文章能帮助大家解决问题。1.基本介绍1)策略模式(Strateg...
    99+
    2023-06-30
  • Java中常用的设计模式之策略模式详解
    目录优点缺点使用场景一、实现方式1、订单类型枚举类2、订单处理接口3、普通订单处理器4、秒杀订单处理器5、拼团订单处理器6、下单管理器二、测试1、引入依赖2、测试用例总结优点 1.算...
    99+
    2022-11-13
  • Java设计模式之工厂模式案例详解
    目录分类案例需求方案一:简单工厂模式方案二:工厂方法模式方案三:抽象工厂模式对比分析总结 分类 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 案例 需求 根据蛋糕的不同口味,...
    99+
    2022-11-13
  • JavaScript设计模式策略模式案例分享
    前言 策略设计模式就是指一个问题匹配多个解决方法,不一定要用到哪一个,而且有可能随时增加多个方案 比如我们去买书,书店都会搞一些优惠活动,满100减20,满200减50,八折优惠这些...
    99+
    2022-11-13
  • 深入了解Java设计模式之策略模式
    目录定义解决的问题核心要点类图溢出效用代码实现核心接口实现类-三个Context类Main方法拓展JDK源码Spring源码定义 定义了算法家族,分别封装起来,让他们之间可以相互替换...
    99+
    2022-11-13
  • 深入理解Java设计模式之策略模式
    目录一、什么是策略模式二、策略模式的结构三、策略模式的应用场景四、策略模式的优缺点六、策略模式的实现七、策略模式和简单工厂模式的结合八、策略枚举的实现九、总结一、什么是策略模式 策略...
    99+
    2022-11-12
  • Java特性之设计模式【策略模式】
    一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随...
    99+
    2023-10-18
    策略模式 java 设计模式
  • Python 中的设计模式详解之:策略模
    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用。《设计模式:可复用面向对象软件的基础》一书中有 23 个模式,其中有 16 个在动态语言中“不见了,或者简化了”。 1、策略模式概述 策略模式:定义一系列算法,把...
    99+
    2023-01-31
    详解 策略 模式
  • Go语言基础设计模式之策略模式示例详解
    目录概述针对同一类型问题的多种处理方式一、不使用策略模式二、策略模式UML 总结示例 概述 定义一系列算法,将每个算法封装起来。并让它们能够相互替换。策略模式让算法独立于使用它的客户...
    99+
    2022-11-12
  • C#设计模式之策略模式
    策略模式 所谓策略其实就是做一件事情有很多很多的方法,比如说一个商场要搞促销,促销的方式有可能有很多:打折啊,满100返50啊、积分等等之类的。这种不同的促销方式在我们系统中表示就是...
    99+
    2022-11-13
  • javascript设计模式之策略模式
    目录一. 认识策略模式二. 具体实现和思想三. 策略模式的实际运用四. 总结一. 认识策略模式 策略模式的定义:定义一系列的算法,将他们一个个封装起来,使他们直接可以相互替换。 策略...
    99+
    2022-11-12
  • Java 设计模式中的策略模式详情
    目录策略模式的应用场景是否符合有没有必要不用策略模式例子使用策略模式策略上下文策略接口以及具体实现类Main类两种方式的不同策略模式有没有必要使用?如何避免Context类使用判断逻...
    99+
    2022-11-13
  • JAVA设计模式之单例模式详解
    目录前言一、单例模式是什么?二、懒汉式单例三、饿汉式单例四、双重校验锁总结前言 在之前的文章里已经介绍了设计模式以及设计原则的概念,接下来我们从单例模式入手深入学习几种常用的JAVA...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作