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

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式

《重学Java设计模式》之 原型模式

《重学Java设计模式》之 单例模式

模拟发奖多种商品

工程结构

奖品发放接口

package com.yys.mes.design.factory.store;public interface ICommodity {/*** @Author Sherry* @Date 14:20 2024/11/6**/void sendCommodity(String uId, String commodityId, String bizId);
}

购物卡发放实现类

package com.yys.mes.design.factory.store.impl;import com.yys.mes.design.factory.store.ICommodity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;@Service
@Slf4j
public class CardCommodityService implements ICommodity {@Overridepublic void sendCommodity(String uId, String commodityId, String bizId) {//购物卡log.info("购物卡发放成功!");}
}

优惠券发放实现类

package com.yys.mes.design.factory.store.impl;import com.yys.mes.design.factory.store.ICommodity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import java.util.Map;@Service
@Slf4j
public class CouponCommodityService implements ICommodity {@Overridepublic void sendCommodity(String uId, String commodityId, String bizId) {//优惠券发放log.info("优惠券发放成功!");}
}

实物发放实现类

package com.yys.mes.design.factory.store.impl;import com.yys.mes.design.factory.store.ICommodity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;@Service
@Slf4j
public class GoodsCommodityService implements ICommodity {@Overridepublic void sendCommodity(String uId, String commodityId, String bizId) {//实物商品log.info("实物商品发放成功!");}
}

奖品类型工厂

通过 Map<String, ICommodity> 来存储所有的实现类。Spring 会自动将所有实现了 ICommodity 接口的 Bean 注入到这个 Map 中。我们可以通过传入类型(例如 "card")来获取对应的实现类。

package com.yys.mes.design.factory.config;import com.yys.mes.design.factory.store.ICommodity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Map;@Component
public class CommodityFactory {private final Map<String, ICommodity> commodityServices;@Autowiredpublic CommodityFactory(Map<String, ICommodity> commodityServices) {this.commodityServices = commodityServices;}// 根据类型返回对应的ICommodity实现public ICommodity getCommodityService(String type) {ICommodity commodityService = commodityServices.get(type + "CommodityService");if (commodityService == null) {throw new IllegalArgumentException("未知的奖品类型: " + type);}return commodityService;}
}

调用工厂

package com.yys.mes.design.factory.config;import com.yys.mes.design.factory.store.ICommodity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class StoreFactory {private final CommodityFactory commodityFactory;@Autowiredpublic StoreFactory(CommodityFactory commodityFactory) {this.commodityFactory = commodityFactory;}public void distributeCommodity(String type, String uId, String commodityId, String bizId) {// 通过工厂获取对应的ICommodity实现ICommodity commodityService = commodityFactory.getCommodityService(type);commodityService.sendCommodity(uId, commodityId, bizId);}
}

测试验证

package com.yys.mes.design.factory.Controller;import com.yys.mes.design.factory.config.StoreFactory;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/send")
public class ExampleController {@Resourceprivate StoreFactory storeFactory;@GetMapping("/distribute")public String distributeCommodity(@RequestParam String type, @RequestParam String uId,@RequestParam String commodityId, @RequestParam String bizId) {storeFactory.distributeCommodity(type, uId, commodityId, bizId);return "奖品发放成功!";}
}

相关文章:

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…...

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …...

知识竞赛答题系统,线上答题小程序链接怎么做?

随着智能手机的普及&#xff0c;越来越多的单位开始在线上开展知识竞赛。这种形式的知识竞赛不仅易于操作&#xff0c;而且参与度更高。那么线上知识竞赛答题系统怎么做呢&#xff1f;自己可以做吗&#xff1f;答案是可以的&#xff01;借助微信答题系统制作平台风传吧&#xf…...

基于SSM的社区物业管理系统+LW参考示例

1.项目介绍 系统角色&#xff1a;管理员、业主&#xff08;普通用户&#xff09;功能模块&#xff1a;管理员&#xff08;用户管理、二手置换管理、报修管理、缴费管理、公告管理&#xff09;、普通用户&#xff08;登录注册、二手置换、生活缴费、信息采集、报事报修&#xf…...

android——jetpack startup初始化框架

一、jetpack startup Android Jetpack Startup是一个库&#xff0c;它简化了Android应用启动过程&#xff0c;尤其是对于那些需要处理复杂数据绑定和初始化逻辑的应用。它的核心在于提供了一个StartupComponent&#xff0c;用于声明应用的初始化逻辑&#xff0c;这个逻辑会在首…...

英伟达HOVER——用于人形机器人的多功能全身控制器:整合不同的控制模式且实现彼此之间的无缝切换

前言 前几天&#xff0c;一在长沙的朋友李总发我一个英伟达HOVER的视频(自从我今年年初以来持续不断的解读各大顶级实验室的最前沿paper、以及分享我司七月在具身领域的探索与落地后&#xff0c;影响力便越来越大了&#xff0c;不断加油 )&#xff0c;该视频说的有点玄乎&…...

GEE代码学习 day17

13.2 地球上到处都有许多图像吗&#xff1f; 我们可以使用下面的代码将这个 reducer count 应用于我们过滤后的 ImageCollection。我们将返回相同的数据集并筛选 2020 年&#xff0c;但没有地理限制。这将收集来自世界各地的图像&#xff0c;然后计算每个像素中的图像数量。以…...

论文阅读笔记-Covariate Shift: A Review and Analysis on Classifiers

前言 标题&#xff1a;Covariate Shift: A Review and Analysis on Classifiers 原文链接&#xff1a;Link\ 我们都知道在机器学习模型中&#xff0c;训练数据和测试数据是不同的阶段&#xff0c;并且&#xff0c;通常是是假定训练数据和测试数据点遵循相同的分布。但是实际上&…...

基于SSM+VUE守护萌宠宠物网站JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…...

【在Linux世界中追寻伟大的One Piece】Socket编程TCP

目录 1 -> TCP socket API 2 -> V1 -Echo Server 2.1 -> 测试多个连接的情况 1 -> TCP socket API socket()&#xff1a; socket()打开一个网络通讯端口&#xff0c;如果成功的话&#xff0c;就像open()一样返回一个文件描述符。应用程序可以像读写文件一样用r…...

进入半导体行业需要具备哪些能力?

要进入半导体公司&#xff0c;尤其是从事工艺流程设计和制程优化的岗位&#xff0c;需要具备一定的跨学科背景。 以某公司招聘要求为例&#xff1a; **公司 招聘岗位&#xff1a;工艺工程师 该公司是一家从事半导体设备、工艺与材料研发、生产和销售的公司&#xff0c;面向…...

Nature重磅:AI化学家再升级!大幅提升实验效率,推动化学合成进入“智能化”新阶段

人工智能&#xff08;AI&#xff09;驱动的机器人&#xff0c;正在我们的生活中扮演着越来越重要的角色&#xff0c;而在化学合成实验室内&#xff0c;它们也在悄然改变着传统实验方式。 如今&#xff0c;科学家们在智能化学领域取得了新突破—— 来自英国利物浦大学的研究团…...

源代码泄漏怎么办?SDC沙盒成为破局利器

在数字化时代&#xff0c;源代码安全已成为企业关注的焦点。源代码的泄露不仅可能导致知识产权的损失&#xff0c;还可能被竞争对手利用&#xff0c;给企业带来巨大的经济损失和法律风险。因此&#xff0c;采取有效的源代码防泄漏措施至关重要。深信达的SDC沙盒防泄密软件&…...

【论文复现】基于图卷积网络的轻量化推荐模型

本文所涉及所有资源均在这里可获取。 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐、摄影的一位博主。 &#x1f4d7;本文收录于论文复现系列&#xff0c;大家有兴趣的可以看一看…...

使用ssh-key免密登录服务器或免密连接git代码仓库网站

ssh登录服务器场景 假设有两台机器&#xff0c;分别是&#xff1a; 源机器&#xff1a;主机A&#xff08;hostA&#xff09;&#xff0c;ip&#xff1a;198.168.0.1 目标机器&#xff1a;主机B&#xff08;hostB&#xff09;&#xff0c;ip&#xff1a;192.168.0.2 ssh-key免…...

自由学习记录(19)

unity核心也算是看完了吧&#xff0c;但觉得的确是少了点东西&#xff0c;之后再看mvc框架&#xff0c;和网络开发&#xff0c;&#xff0c;感觉有必要想想主次顺序了&#xff0c;毕竟在明年的3月之前尽量让自己更有贴合需求的能力 先了解一些相关概念&#xff0c;不用看懂&am…...

Elasticsearch中时间字段格式用法详解

Elasticsearch中时间字段格式用法详解 攻城狮Jozz关注IP属地: 北京 2024.03.18 16:27:51字数 758阅读 2,571 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了全文搜索、结构化搜索以及分析等功能&#xff0c;广泛…...

蓝桥杯-网络安全比赛题目-遗漏的压缩包

小蓝同学给你发来了他自己开发的网站链接&#xff0c; 他说他故意留下了一个压缩包文件&#xff0c;里面有网站的源代码&#xff0c; 他想考验一下你的网络安全技能。 &#xff08;点击“下发赛题”后&#xff0c;你将得到一个http链接。如果该链接自动跳转到https&#xff0c;…...

ES海量数据插入如何优化性能?

2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》&#xff0c;探讨了大模型赋能下的研发变革及如何在公司和行业中落地&#xff0c;AI原生研发新范式的内涵和推动经验。 …...

遥控救生圈,水上应急救援的新革命_鼎跃安全

水上事故发生后&#xff0c;时间就是生命。每一秒钟的延误&#xff0c;都可能增加溺水者失去生命的风险。传统的救援方式往往依赖人工迅速反应&#xff0c;但在大规模的紧急事件中&#xff0c;人工救援速度难以满足需求。而遥控救生圈的出现改变了这一切&#xff0c;它的作用在…...

FPGA调试避坑指南:Vivado ILA采样深度和探针位宽怎么设?资源占用与调试效果的平衡术

FPGA调试实战&#xff1a;ILA采样深度与探针位宽的黄金平衡法则 当你在Artix-7芯片上调试一个包含32位计数器和多状态机的设计时&#xff0c;突然发现ILA吃掉了一半的Block RAM资源&#xff0c;而采样深度却只够捕获5个时钟周期的数据——这种场景是否似曾相识&#xff1f;本文…...

TEA加密算法实战:用Python和C语言实现QQ同款加密(附完整代码)

TEA加密算法实战&#xff1a;从原理到跨语言实现 在即时通讯和物联网设备中&#xff0c;数据安全传输一直是核心需求。TEA&#xff08;Tiny Encryption Algorithm&#xff09;以其轻量级、高效率的特性&#xff0c;成为资源受限环境下的理想选择。本文将深入探讨TEA算法家族的工…...

从RS485到TCP/IP:Modbus协议V1.1b3的三种组网方式对比(含WireShark抓包分析)

从RS485到TCP/IP&#xff1a;Modbus协议V1.1b3的三种组网方式深度实战解析 在工业自动化领域&#xff0c;Modbus协议已经服役超过40年&#xff0c;却依然保持着惊人的生命力。作为工程师&#xff0c;我们常常面临一个关键抉择&#xff1a;在RS485、Modbus和TCP/IP这三种主流组…...

【大模型工程实践③】RAG 基础架构与完整实现

【大模型工程实践③】RAG 基础架构与完整实现:从0到1跑通 作者:AI学习者 | 来源:大模型工程实践学习系列 | 更新:2026年3月 【理论要点速览】 学习本篇前,建议先掌握以下核心理论(点击跳转): ① 为什么需要RAG? ② RAG vs Fine-tuning vs Long Context的决策框架 ③ …...

别再让电费偷偷溜走!用智能时间开关改造家里的热水器和空调(附保姆级选购指南)

别再让电费偷偷溜走&#xff01;用智能时间开关改造家里的热水器和空调&#xff08;附保姆级选购指南&#xff09; 每到月底收到电费账单时&#xff0c;那种"钱不知不觉就溜走"的感觉总是让人心疼。特别是热水器和空调这两大"电老虎"&#xff0c;它们往往…...

Debian12下Docker国内镜像加速全攻略:以腾讯云为例快速部署WordPress

Debian12下Docker国内镜像加速全攻略&#xff1a;以腾讯云为例快速部署WordPress 在Debian12系统中使用Docker时&#xff0c;国内用户常遇到镜像下载速度慢的问题。本文将详细介绍如何配置国内镜像源加速Docker&#xff0c;并以腾讯云为例&#xff0c;快速部署WordPress环境。…...

OpenClaw跨平台同步:GLM-4.7-Flash配置在多设备间保持一致

OpenClaw跨平台同步&#xff1a;GLM-4.7-Flash配置在多设备间保持一致 1. 为什么需要跨设备同步OpenClaw配置 上周我在出差时遇到一个尴尬场景&#xff1a;笔记本上的OpenClaw突然无法响应飞书消息&#xff0c;而所有配置都留在办公室的台式机上。这让我意识到——当AI助手成…...

别再手动折腾了!用Docker一键部署Oracle 11g开发环境(附阿里云镜像地址)

告别繁琐配置&#xff1a;Docker容器化Oracle 11g开发环境实战指南 每当新项目需要搭建Oracle开发环境时&#xff0c;开发者们总会面临相同的困境——数小时的安装配置、复杂的系统依赖、难以复现的环境问题。传统安装方式不仅消耗宝贵时间&#xff0c;更可能因系统差异导致团…...

MultiHighlight插件深度解析:掌握代码高亮的艺术与科学

MultiHighlight插件深度解析&#xff1a;掌握代码高亮的艺术与科学 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors &#x1f3a8;&#x1f4a1; 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight 在复杂…...

STP安全特性实战:如何用bpduguard和bpdufilter防止网络攻击(附真实案例)

STP安全特性实战&#xff1a;如何用bpduguard和bpdufilter防止网络攻击&#xff08;附真实案例&#xff09; 在企业网络架构中&#xff0c;生成树协议&#xff08;STP&#xff09;的安全防护常常被忽视&#xff0c;直到某天凌晨2点&#xff0c;值班工程师突然接到全网瘫痪的告警…...