策略模式结合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绘画参数设置详解
在数字艺术和设计领域,Midjourney是一款强大的绘画工具,它允许艺术家和设计师以数字方式创作出精美的图像。为了充分发挥Midjourney的潜力,正确设置其绘画参数至关重要。本文将深入探讨Midjourney的绘画参数设置,帮助用户更好地掌…...
计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)
1,绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院,经过我们前期的调查,院方大部分工作采用手工操作方式,会带来工作效率过低,运营成本过大的问题。 院方可用合理的较少投入取得更好…...
事务与并发控制
事务(Transaction0):要么全做,要么全不做; 事务ACID:原子性Atomicity;一致性Consistency;隔离性Isolation;持久性Durability; 并发操作问题: 1.…...
spring boot 中的异步@Async
spring boot 开启异步调用 1、启动类上添加EnableAsync注解,表示启动异步 2、在具体实现异步的方法上添加Async注解 package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootAppli…...
【C++/STL】list(常见接口、模拟实现、反向迭代器)
🌈个人主页:秦jh_-CSDN博客🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 目录 前言 list的常见接口 对迭代器的封装 节点 重载-> const迭代器 list与vector的对比 反向迭代…...
wms中对屏幕进行修改wm size设置屏幕宽高原理剖析
背景: 上面是正常屏幕1440x2960的屏幕大小,如果对display进行相关的修改,可以使用如下命令: adb shell wm size 1080x1920 得出如下的画面 明显看到差异就是屏幕上下有黑边了,那么下面就来调研这个wm size是怎么做的…...
java面试题及答案2024,java2024最新面试题及答案(之一)
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Ja…...
Go Modules 使用
文章参考https://blog.csdn.net/wohu1104/article/details/110505489 不使用Go Modules,所有的依赖包都是存放在 GOPATH /pkg下,没有版本控制。如果 package 没有做到完全的向前兼容,会导致多个项目无法运行(包版本需求不同)。 于是推出了g…...
结账和反结账
结账与反结账功能在财务软件和会计系统中扮演着重要的角色,以下是关于这两个功能的详细解释: 一、结账功能 结账功能是计算和结转各个会计科目本期发生额和期末余额的过程,同时标志着一定时期内财务活动的结束和财务数据的固化。结账功能的…...
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、需要创建监听器,才能让靶机上线,连接我们公网服务端上去开启的帧监听端口,做任何操作 都是通过服务器的IP地址去连接靶机,去和靶机进行文件stage的一个传输和交互。这里推荐把cs 放到公网上边,比较…...
UWP与WPF:微软两大UI框架
在微软的开发者生态系统中,UWP(Universal Windows Platform)与WPF(Windows Presentation Foundation)是构建Windows应用的两大明星框架。它们各自携带独特的设计理念和技术特性,服务于不同的开发需求和应用场景。本文将深入探讨这两者之间的异同…...
【面试】字节码文件是跨平台的吗?
目录 1. 说明 1. 说明 1.字节码文件(.class文件)是跨平台的。2.字节码文件是Java源代码经过Java编译器(javac)编译后生成的中间代码文件,这些包含了Java虚拟机(JVM)指令,而不是特定…...
SpringCloud中注册中心Nacos的下载与使用步骤
1.前言 Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款服务发现和配置管理工具。它可以帮助用户自动化地进行服务注册、发现和配置管理,是面向微服务架构的一个重要组成部分。 2.下载 链接:https://pan.b…...
心缘Hub小程序
心缘Hub小程序 文章目录 心缘Hub小程序[TOC](文章目录) 前言飞书文章:[添加链接描述](https://mqdyd6qj756.feishu.cn/wiki/X9qbwrq70i43W0kr5X8cqytSnKb) 一、简介 前言 飞书文章:添加链接描述 一、简介 心缘Hub 不要钱可以匹配 有缘人 、直接拿微信…...
攻防世界maze做法(迷宫题)
首先查壳64bit,直接丢进ida64中进行反编译就完事儿了,然后直接进入main函数打注释分析首先,题目已经提示了这是个迷宫题,我们抓住做迷宫题的两个要点,一找玩法,二找地图, 玩法在主函数中&#…...
PID——调参的步骤
第一步:确定比例增益P 确定比例增益 P 时,首先去掉 PID 的积分项和微分项,一般是令 Ti0、 Td0(具体见PID 的参数设定说明),使PID 为纯比例调节。 输入设定为系统允许的最大值60%~70%,由0逐渐加…...
Deno入门:Node.js的现代替代品
Deno 作为 Node.js 的现代替代品,提供了许多改进和创新,尤其是在安全性、模块系统和开发体验方面。虽然它仍处于发展阶段,但对于寻求简洁、安全和现代化 JavaScript/TypeScript 开发环境的开发者来说,Deno 是一个值得考虑的选择。…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
