当前位置: 首页 > news >正文

策略模式结合Spring使用

1.抽象策略

/*** 支付方式策略* @author Linging* @version 1.0.0* @since 1.0*/
public interface PayStrategy {void pay(BigDecimal money);}

2.具体策略

/*** 支付宝* @author Linging* @version 1.0.0* @since 1.0*/
@Component("aliPayStrategy")
public class AliPayStrategy implements PayStrategy{@Overridepublic void pay(BigDecimal money) {System.out.println("使用支付宝支付了 " + money + " 元");}
}
/*** 微信支付* @author Linging* @version 1.0.0* @since 1.0*/
@Component("weChatPayStrategy")
public class WeChatPayStrategy implements PayStrategy{@Overridepublic void pay(BigDecimal money) {System.out.println("使用微信支付了 " + money + " 元");}
}
/*** 信用卡支付* @author Linging* @version 1.0.0* @since 1.0*/
@Component("creditCardPayStrategy")
public class CreditCardPayStrategy implements PayStrategy{@Overridepublic void pay(BigDecimal money) {System.out.println("使用信用卡支付了 " + money + " 元");}
}

3.工厂配置策略

/*** 配置策略* @author Linging* @version 1.0.0* @since 1.0*/
@Component
public class PayContentFactory {@Resourceprivate ApplicationContext context;private Map<Integer, PayStrategy> map = new HashMap<>();@PostConstructpublic void init(){for (PayEnum payEnum : PayEnum.values()) {map.putIfAbsent(payEnum.getCode(),context.getBean(payEnum.getBeanName(), PayStrategy.class));}}public PayStrategy getPayStrategyPay(PayEnum payEnum){return map.get(payEnum.getCode());}}

4.枚举

/*** @author Linging* @version 1.0.0* @since 1.0*/
public enum PayEnum {ALI(1, "支付宝", "aliPayStrategy"),WECHAT(2, "微信", "weChatPayStrategy"),CREDIT_CARD(3, "信用卡", "creditCardPayStrategy"),;int code;String remark;String beanName;PayEnum(int code, String remark, String beanName) {this.code = code;this.remark = remark;this.beanName = beanName;}public int getCode() {return code;}public String getRemark() {return remark;}public String getBeanName() {return beanName;}
}

5.使用

    @Resourceprivate PayContentFactory payContentFactory;@GetMapping("/testStrategy")public String testStrategy(){payContentFactory.getPayStrategyPay(PayEnum.ALI).pay(new BigDecimal("100"));payContentFactory.getPayStrategyPay(PayEnum.WECHAT).pay(new BigDecimal("99"));payContentFactory.getPayStrategyPay(PayEnum.CREDIT_CARD).pay(new BigDecimal("88"));return "ok";}

相关文章:

策略模式结合Spring使用

1.抽象策略 /*** 支付方式策略* author Linging* version 1.0.0* since 1.0*/ public interface PayStrategy {void pay(BigDecimal money);}2.具体策略 /*** 支付宝* author Linging* version 1.0.0* since 1.0*/ Component("aliPayStrategy") public class AliPa…...

基于 RNNs 对 IMDB 电影评论进行情感分类

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…...

Midjourney绘画参数设置详解

在数字艺术和设计领域&#xff0c;Midjourney是一款强大的绘画工具&#xff0c;它允许艺术家和设计师以数字方式创作出精美的图像。为了充分发挥Midjourney的潜力&#xff0c;正确设置其绘画参数至关重要。本文将深入探讨Midjourney的绘画参数设置&#xff0c;帮助用户更好地掌…...

计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)

1&#xff0c;绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院&#xff0c;经过我们前期的调查&#xff0c;院方大部分工作采用手工操作方式,会带来工作效率过低&#xff0c;运营成本过大的问题。 院方可用合理的较少投入取得更好…...

事务与并发控制

事务&#xff08;Transaction0&#xff09;&#xff1a;要么全做&#xff0c;要么全不做&#xff1b; 事务ACID&#xff1a;原子性Atomicity&#xff1b;一致性Consistency&#xff1b;隔离性Isolation&#xff1b;持久性Durability&#xff1b; 并发操作问题&#xff1a; 1.…...

spring boot 中的异步@Async

spring boot 开启异步调用 1、启动类上添加EnableAsync注解&#xff0c;表示启动异步 2、在具体实现异步的方法上添加Async注解 package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootAppli…...

【C++/STL】list(常见接口、模拟实现、反向迭代器)

&#x1f308;个人主页&#xff1a;秦jh_-CSDN博客&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 目录 前言 list的常见接口 对迭代器的封装 节点 重载-> const迭代器 list与vector的对比 反向迭代…...

wms中对屏幕进行修改wm size设置屏幕宽高原理剖析

背景&#xff1a; 上面是正常屏幕1440x2960的屏幕大小&#xff0c;如果对display进行相关的修改&#xff0c;可以使用如下命令&#xff1a; adb shell wm size 1080x1920 得出如下的画面 明显看到差异就是屏幕上下有黑边了&#xff0c;那么下面就来调研这个wm size是怎么做的…...

java面试题及答案2024,java2024最新面试题及答案(之一)

发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望对大家有帮助哈~ 本套Java面试题大全&#xff0c;全的不能再全&#xff0c;哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Ja…...

Go Modules 使用

文章参考https://blog.csdn.net/wohu1104/article/details/110505489 不使用Go Modules&#xff0c;所有的依赖包都是存放在 GOPATH /pkg下&#xff0c;没有版本控制。如果 package 没有做到完全的向前兼容&#xff0c;会导致多个项目无法运行(包版本需求不同)。 于是推出了g…...

结账和反结账

结账与反结账功能在财务软件和会计系统中扮演着重要的角色&#xff0c;以下是关于这两个功能的详细解释&#xff1a; 一、结账功能 结账功能是计算和结转各个会计科目本期发生额和期末余额的过程&#xff0c;同时标志着一定时期内财务活动的结束和财务数据的固化。结账功能的…...

k8s怎么监听资源的变更

监听k8s所有的 Deployment 资源 package mainimport ("context""fmt"v1 "k8s.io/api/apps/v1""k8s.io/apimachinery/pkg/util/json""k8s.io/client-go/informers""k8s.io/client-go/kubernetes""k8s.io/cli…...

Cobaltstrike常用功能

一、快捷工具栏 3、需要创建监听器&#xff0c;才能让靶机上线&#xff0c;连接我们公网服务端上去开启的帧监听端口&#xff0c;做任何操作 都是通过服务器的IP地址去连接靶机&#xff0c;去和靶机进行文件stage的一个传输和交互。这里推荐把cs 放到公网上边&#xff0c;比较…...

UWP与WPF:微软两大UI框架

在微软的开发者生态系统中&#xff0c;UWP(Universal Windows Platform)与WPF(Windows Presentation Foundation)是构建Windows应用的两大明星框架。它们各自携带独特的设计理念和技术特性&#xff0c;服务于不同的开发需求和应用场景。本文将深入探讨这两者之间的异同&#xf…...

【面试】字节码文件是跨平台的吗?

目录 1. 说明 1. 说明 1.字节码文件&#xff08;.class文件&#xff09;是跨平台的。2.字节码文件是Java源代码经过Java编译器&#xff08;javac&#xff09;编译后生成的中间代码文件&#xff0c;这些包含了Java虚拟机&#xff08;JVM&#xff09;指令&#xff0c;而不是特定…...

SpringCloud中注册中心Nacos的下载与使用步骤

1.前言 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一款服务发现和配置管理工具。它可以帮助用户自动化地进行服务注册、发现和配置管理&#xff0c;是面向微服务架构的一个重要组成部分。 2.下载 链接&#xff1a;https://pan.b…...

心缘Hub小程序

心缘Hub小程序 文章目录 心缘Hub小程序[TOC](文章目录) 前言飞书文章&#xff1a;[添加链接描述](https://mqdyd6qj756.feishu.cn/wiki/X9qbwrq70i43W0kr5X8cqytSnKb) 一、简介 前言 飞书文章&#xff1a;添加链接描述 一、简介 心缘Hub 不要钱可以匹配 有缘人 、直接拿微信…...

攻防世界maze做法(迷宫题)

首先查壳64bit&#xff0c;直接丢进ida64中进行反编译就完事儿了&#xff0c;然后直接进入main函数打注释分析首先&#xff0c;题目已经提示了这是个迷宫题&#xff0c;我们抓住做迷宫题的两个要点&#xff0c;一找玩法&#xff0c;二找地图&#xff0c; 玩法在主函数中&#…...

PID——调参的步骤

第一步&#xff1a;确定比例增益P 确定比例增益 P 时&#xff0c;首先去掉 PID 的积分项和微分项&#xff0c;一般是令 Ti0、 Td0&#xff08;具体见PID 的参数设定说明&#xff09;&#xff0c;使PID 为纯比例调节。 输入设定为系统允许的最大值60%~70%&#xff0c;由0逐渐加…...

Deno入门:Node.js的现代替代品

Deno 作为 Node.js 的现代替代品&#xff0c;提供了许多改进和创新&#xff0c;尤其是在安全性、模块系统和开发体验方面。虽然它仍处于发展阶段&#xff0c;但对于寻求简洁、安全和现代化 JavaScript/TypeScript 开发环境的开发者来说&#xff0c;Deno 是一个值得考虑的选择。…...

信通院:AI4SE行业现状调查报告 2026

这份信通院 2026 年 AI4SE 行业现状调查报告&#xff0c;核心是 AI 与软件工程深度融合进入规模化落地关键期&#xff0c;全流程提效显著&#xff0c;企业高度重视&#xff0c;但仍面临人才、成本等挑战&#xff0c;未来将走向自主编程、多智能体协同的新范式。一、调研概况有效…...

09_Neo4j知识体系之行业应用与最佳实践

09_Neo4j知识体系之行业应用与最佳实践 体系 行业应用层&#xff1a;金融反欺诈、智能推荐、社交网络分析、知识图谱构建、供应链优化关联能力&#xff1a;与图建模、路径分析、图算法、GraphRAG、实时决策和企业数据治理密切相关适用对象&#xff1a;解决方案架构师、行业数字…...

如何快速掌握DownKyi:从新手到专家的完整视频下载指南

如何快速掌握DownKyi&#xff1a;从新手到专家的完整视频下载指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#…...

2026最权威的五大降重复率网站横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 需从词汇、句式跟逻辑这三方面来着手&#xff0c;以求降低AI生成内容的可识别性。于词汇方面…...

跨越时空的图形接口桥梁:d3d8to9如何让经典游戏重获新生

跨越时空的图形接口桥梁&#xff1a;d3d8to9如何让经典游戏重获新生 【免费下载链接】d3d8to9 A D3D8 pseudo-driver which converts API calls and bytecode shaders to equivalent D3D9 ones. 项目地址: https://gitcode.com/gh_mirrors/d3/d3d8to9 当经典遭遇现代&am…...

从继电器到模拟开关:用CircuitJS带你搞懂‘开关控制开关’的进化史

从继电器到模拟开关&#xff1a;用CircuitJS带你搞懂‘开关控制开关’的进化史 在电子工程的发展历程中&#xff0c;开关器件从笨重的机械结构演变为集成电路中的微小模块&#xff0c;这一过程不仅是技术的进步&#xff0c;更是设计思维的抽象化革命。当你第一次在CircuitJS仿真…...

3个技巧让你轻松掌控暗黑2角色命运:d2s-editor的存档修改艺术

3个技巧让你轻松掌控暗黑2角色命运&#xff1a;d2s-editor的存档修改艺术 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 在《暗黑破坏神2》的冒险旅程中&#xff0c;你是否曾因误加属性点而让精心培养的角色沦为废号&#xff1…...

从0到1的yapi接口文档部署记录

skills结合ai生成文档 顺便记录下使用一开始我想的是就用ai生成文档&#xff0c;还特意总结了skills方便后面使用&#xff0c;总结如下 --- name: Generate API Document For Controller description: 根据Controller生成详细的接口文档&#xff0c;包含请求方式、入参解释、…...

魔兽争霸3游戏性能优化全攻略:从卡顿到流畅的实战指南

魔兽争霸3游戏性能优化全攻略&#xff1a;从卡顿到流畅的实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 当你在魔兽争霸3的团战关键时刻&…...

数字游民装备:OpenClaw+Qwen3-32B的轻量化旅行方案

数字游民装备&#xff1a;OpenClawQwen3-32B的轻量化旅行方案 1. 为什么数字游民需要本地AI助手 去年在巴厘岛旅居时&#xff0c;我深刻体会到数字游民的工作痛点&#xff1a;不稳定的网络、时区差异导致的协作延迟、以及移动办公场景下的效率损耗。当你在咖啡馆处理文件时&a…...