阿里云短信发送(工厂模式+模板方法+策略模式实现)


提示:以下是本篇文章正文内容,下面案例可供参考

一、业务场景

每种业务场景对手机号校验方式可能都不相同

1.1 验证码登录

校验:手机号在系统是否存在,存在则发送短信

1.2 手机号注册

校验:手机号在系统是否已经注册,未注册则发送短信

1.3 忘记密码

校验:手机号在系统是否存在,存在则发送短信

1.4 其他场景…

二. 准备工作

1.注册阿里云账号

2.阿里云申请签名

3.阿里云短信模版

4.阿里云短信控制台测试

三、功能规划

1. 设计模式

1.1工厂模式:根据不同业务创建不同的工厂类

1.1策略模式:每个类有不同的短信模版内容

1.2 模版方法模式:每个类 发送时,都需要提前进行业务校验

作用:提高代码的可扩展性

2.不同业务类型使用不同的缓存key

四、业务实现

在这里插入图片描述

1.引入jar

		<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>3.1.0</version>
        </dependency>

2.yam配置信息及对应配置类

在这里插入图片描述

@Configuration
@ConfigurationProperties(prefix = "aliyun.sms")
@Data
public class AliyunSmsConfig {
   
   

    // 阿里云短信服务accessKeyId
    private String accessKeyId;

    // 阿里云短信服务accessKeySecret
    private String accessKeySecret;

    // 短信签名
    private String signName;

    // 短信发送地区
    private String regionId;

    // 短信模板
    private Map<String, String> templates;

    public String getTemplateCode(String key) {
   
   
        String templateCode = templates.get(key);
        ArgumentAssert.notBlank(templateCode, "短信模板不存在");
        return templateCode;
    }
}

3. 业务工厂: 获取对应业务模版


@Service
@AllArgsConstructor
@Slf4j
public class SmsTemplateFactory {
   
   

    private final LoginSmsTemplate loginSmsTemplate;

    private final RegisterSmsTemplate registerSmsTemplate;

    private final ForgotPasswordSmsTemplate forgotPasswordSmsTemplate;

    /**
     * 根据场景类型获取对应的模板
     *
     * @param templateKey 场景类型(login/register/forgotPassword)
     * @return 对应的模板实现类
     */
    public SmsTemplate getTemplate(String templateKey) {
   
   
        return switch (templateKey) {
   
   
            case "login" -> loginSmsTemplate;
            case "register" -> registerSmsTemplate;
            case "forgotPassword" -> forgotPasswordSmsTemplate;
            default -> throw new IllegalArgumentException("未知的场景类型:" + templateKey);
        };
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值