使用Spring实现工厂+策略模式

news2025/2/26 1:27:57

使用Spring实现工厂+策略模式

这里使用发短信业务:

  • 不同短信有不同模板
  • 但是发送方法都相同
  • 只是发送内同不同

1. 定义短信发送策略接口:

//策略接口
public interface SmsTemStrategy {
    public void sendSms(Map<String,String> params);
}

2.短信发送策略接口实现类:

  1. 登录短信模板
//自定义策略名
@Component(value = "LoginSmsTempwwww")
public class LoginSmsTemp implements SmsTemStrategy{

    @Autowired
    SendServiceSmsImpl sendServiceSms;

	//短信模板场景
    private static final String scene="login";

    /**
     *
     */
    @Override
    public void sendSms(Map<String,String> params) {
        String template = sendServiceSms.getTemplate(scene);
        params.put("template",template);
        System.out.println(sendServiceSms.sendSms(params));
    }
}
  1. 注册短信模板

    @Component(value = "register")
    public class RegisterSmsTemp implements SmsTemStrategy{
    
        @Autowired
        SendServiceSmsImpl sendServiceSms;
    
    
        private static final String scene="register";
        /**
         *发送短信
         */
        @Override
        public void sendSms(Map<String,String> params) {
            //获取短信模板
            String template = sendServiceSms.getTemplate(scene);
            params.put("template",template);
            //发送短信
            System.out.println(sendServiceSms.sendSms(params));
        }
    }
    
    

    3.发送短信服务类(一般调用第三方接口)

    @Component
    public class SendServiceSmsImpl implements SendServiceSms {
        /**
         *通过场景获取短信模板接口
         */
        @Override
        public String getTemplate(String str) {
            return "获取"+str+"模板成功";
        }
    
        /**
         *发送短信接口
         */
        @Override
        public String sendSms(Map<String,String> params) {
            return "发送短信成功"+params;
        }
    
    }
    
    

4.短信发送工厂(核心)

Spring会自动将Strategy接口的实现类注入到这个Map中(前提是实现类得是交给Spring 容器管理的),这个Map的key为bean的id,这个ID可以用@Component(value = “xxx”)的方式设置,如果直接用默认的方式的话,就是首字母小写。value值则为对应的策略实现类

@Component
public class SmsFactory {

    //这里Spring会将所有的类都注册到这里
    @Autowired
    Map<String,SmsTemStrategy> smsTemStrategyMap;

    //通过bean的name获取
    public SmsTemStrategy getBy(String strategyName) {
        return smsTemStrategyMap.get(strategyName);
    }
}

工厂类Map自动注入结果如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】Numpy傅里叶变换总结

文章目录简介fft简介 Fourier变换极其逆变换在数学上的定义如下 F(ω)∫−∞∞f(t)e−iωtdtf(t)π2∫−∞∞F(ω)eiωtdωF(\omega)\int^\infty_{-\infty}f(t)e^{-i\omega t}\text dt\\ f(t)\frac{\pi}{2}\int^\infty_{-\infty}F(\omega)e^{i\omega t}\text d\omega F(ω)∫−…

飞行机器人专栏(八)-- AGX Xavier 通信、控制及视觉应用开发

目录 0. Introduction of Jetson Developer kits 1. 硬件对比 Jetson 模组系列 Jetson AGX Orin 系列 Jetson Orin NX 系列 Jetson AGX Xavier 系列 Jetson Xavier NX 系列 Jetson TX2 系列 Jetson Nano 2. 应用场景 1. Introduction of AGX Xavier Taking Perform…

HTML+PHP+MySQL实现新闻列表模块(1+X Web前端开发中级 例题)——初稿

&#x1f4c4;题目要求 阅读下列说明、效果图、MySQL数据库操作和代码&#xff0c;进行动态网页开发&#xff0c;填写&#xff08;1&#xff09;至&#xff08;15&#xff09;代码。&#x1f9e9;说明 该程序为一个html和php混合的新闻列表模块&#xff0c;使用PHP语言&#x…

【深入浅出Spring6】第九期——Spring对事务的支持

因为很多系统都包含事务&#xff0c;所以Spring提供了相关的Api&#xff0c;属于AOP切面编程的二次封装 那么什么是事务&#xff08;Transaction&#xff09;呢&#xff1f; 指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)在一个业务流程中可能需要多条DML联合执…

【Hack The Box】Linux练习-- OpenAdmin

HTB 学习笔记 【Hack The Box】Linux练习-- OpenAdmin &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月22日&#x1f334; &#x…

Flutter组件--OverflowBox、SizedOverflowBox(子组件超出父组件裁剪)

1.OverflowBox介绍 OverflowBox 允许子控件超出父控件的边界。这个特性主要可以用来实现文字或者按钮角标的. OverflowBox构造函数 const OverflowBox({Key? key,this.alignment Alignment.center,this.minWidth,this.maxWidth,this.minHeight,this.maxHeight,Widget? ch…

java面试强基(8)

String、StringBuffer、StringBuilder 的区别&#xff1f; 可变性 ​ String 是不可变的。StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类&#xff0c;在 AbstractStringBuilder 中也是使用字符数组保存字符串&#xff0c;不过没有使用 final 和 private …

Air780E涂鸦云远程开关-LuatOS

Air780E涂鸦云远程开关-LuatOS 涂鸦智能在远程开关和灯控领域可以算是龙头了&#xff0c;今天就来学习一下&#xff0c;如何接入涂鸦云平台 一、涂鸦云准备 注册账号不写了&#xff0c;自己注册账号即可 1、创建产品 点击产品->极速智能化->产品开发页面的创建产品 …

JDK动态代理

可以针对一些不特定的类或者一些不特定的方法进行代理 可以在程序运行时动态变化代理规则 代理类在程序运行时才创建代理模式成为动态代理 代理类并不是在Java代码中定义好的 而是在程序运行时根据在Java代码中指示动态生成的 Proxy JDK动态代理 面向接口 import java.lang.r…

前后端分离页面(从数据库到前端、后端手把手教你如何搭建 -- 功能实现:增加查询)

目录 一、准备条件 前台 后台 二、数据库设计 建议不要导入&#xff0c;导入有乱码的风险&#xff1b;新建查询运行下面代码更快捷。 三、导入前端项目 导入后使用命令行打开黑窗口&#xff0c;测试一下有没有npm -v环境 如果出现命令无效&#xff0c;就使用管理员身份打开…

SpringAOP(1)-spring源码详解(六)

上篇文章说了spring监听器&#xff0c;监听event&#xff0c;先把事件全部存储在多播器&#xff0c;通过publicEvent来触发多播器发送事件&#xff0c;他可以通过代码注解&#xff0c;或者实现接口的方式来实现事件监听&#xff0c;达到解耦和异步的效果。 Spring监听器-sprin…

Jupyter介绍和安装使用

一. 前言&#xff1a; 最近&#xff0c;小熙发现了一个有意思的工具Jupyter notebook&#xff0c;刚上手熟悉了下&#xff0c;特此记录分享。 二. 简介&#xff1a; 简单介绍并说下用途&#xff1a; Jupyter Notebook是一款开源的web应用&#xff0c;支持markdown编辑&#…

Windows为什么使用广播机制更新信息?

很多 Windows 信息通知机制是基于广播消息&#xff0c;例如&#xff0c;DDE&#xff0c;WM_FONTCHANGE 消息和系统设置的修改等。 当我们知道&#xff0c;消息的广播可能导致系统由于某个窗口停止处理消息而导致整个系统停止时&#xff0c;为什么我们还是使用广播呢&#xff1f…

【解决】VSCode编写C++自定义头文件undefined reference异常问题

最近在使用VSCode编写C程序过程中&#xff0c;自定义一个 *.h 文件&#xff0c;其中包含了函数声明&#xff0c;在主函数中引入头文件后&#xff0c;调用头文件对应C文件中的方法&#xff0c;出现了undefined reference问题&#xff0c;这个主要是配置没有正确造成的&#xff0…

Git——分支(详细解释)

目录 一、概念 1.1 服务器运行模式 1.2 分支概念 1.3 分支的好处 二、分支相关操作 2.1 分支操作 2.2 查看当前分支 2.3 创建分支 2.4 切换分支 2.4.1 切换分支 2.4.2 修改代码并提交&#xff08;完整过程&#xff09; 三、合并分支 3.1 正常合并 3.2 冲突合并&#xff…

DGL学习笔记——第一章 图

提示&#xff1a;DGL用户指南学习中 文章目录一、关于图的基本概念&#xff1f;二、图、节点和边三、节点和边的特征四、从外部源创建图1、从Scipy稀疏矩阵中构建图示例2、从networkx中构建图示例3、从csv中构建图结构总结一、关于图的基本概念&#xff1f; 图是用以表示实体及…

【推荐系统学习笔记】-- 1、推荐系统架构

根本解决的问题&#xff1a;在信息过载的情况下&#xff0c;用户如何高效获取感兴趣的信息。 1 逻辑架构 推荐系统要处理的问题就可以被形式化地定义为&#xff1a;对于某个用户U&#xff08;User&#xff09;&#xff0c;在特定场景C&#xff08;Context&#xff09;下&…

区块链 - 各个国家Web3的现状与趋势

​潜力博主推荐&#xff0c;点上面关注博主↑↑↑ 2022年&#xff0c;元宇宙、NFT 、GameFi、DAO、DeFi 等 Web3 时代的新生事物&#xff0c;正在彻底改写传统商业模式&#xff0c;重塑全球数字商业的版图&#xff0c;一个全新的数字时代正在开启。 美国、欧洲官方开始在 Web…

【构建ML驱动的应用程序】第 4 章 :获取初始数据集

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

C语言——指针初阶详解

&#x1f412;博客名&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情 目录 1. 指针是什么 2. 指针和指针类型 2.1指针类型的第一个意义 2.2指针类型的第二个意义 3. 野指针 3.1 野指针成因 3.2 如何…