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

公司就我一个网站制作霸屏推广

公司就我一个网站制作,霸屏推广,支付网站搭建,我的网站为什么打不开基于策略模式实现灵活可扩展的短信服务架构 引言 在企业级应用开发中,短信服务是不可或缺的基础功能之一。随着业务发展,我们可能需要接入多个短信服务提供商(如阿里云、腾讯云、第三方短信网关等),并能够在不修改核…

基于策略模式实现灵活可扩展的短信服务架构

引言

在企业级应用开发中,短信服务是不可或缺的基础功能之一。随着业务发展,我们可能需要接入多个短信服务提供商(如阿里云、腾讯云、第三方短信网关等),并能够在不修改核心业务代码的情况下灵活切换。本文将介绍如何使用策略模式设计一个高扩展性的短信服务架构,并结合实际代码示例进行讲解。

策略模式简介

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端。

策略模式的三大角色

  1. 策略接口(Strategy Interface):定义所有支持的算法的公共接口
  2. 具体策略(Concrete Strategies):实现策略接口的具体算法类
  3. 上下文(Context):持有一个策略对象的引用,并将客户端请求委托给策略对象

短信服务架构设计

1. 策略接口设计

@Service
public interface SmsComInterFace {public R sendSms(String phoneNumber, Map<String, Object> templateParams);
}

这里使用了Spring的@Service注解标记接口,虽然对接口使用@Service不是必须的,但在某些框架中可以辅助组件扫描。

2. 具体策略实现

以阿里云短信服务为例,实现具体的策略:

package com.ruoyi.sms.config;import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.sms.inter.SmsComInterFace;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.Map;@Component
public class AliyunSmsUtil implements SmsComInterFace {@Value("${aliyun.sms.sms-access-key-id}")private String accessKeyId;@Value("${aliyun.sms.sms-access-key-secret}")private String accessKeySecret;@Value("${aliyun.sms.sms-sign-nam}")private String signName;@Value("${aliyun.sms.sms-template-code}")private String templateCode;@Value("${aliyun.sms.sms-endpoint}")private String endpoint;@Value("${aliyun.sms.region-id}")private String regionId;public  R sendSms(String phoneNumber, Map<String, Object> templateParams) {try {DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setPhoneNumbers(phoneNumber);request.setSignName(signName);request.setTemplateCode(templateCode);// 将HashMap转化为JSON字符串String templateParam = JSON.toJSONString(templateParams);request.setTemplateParam(templateParam);SendSmsResponse response = client.getAcsResponse(request);if(response.getCode() != null && response.getCode().equals("OK")){return R.ok();}return R.fail(response.getMessage());} catch (ClientException e) {e.printStackTrace();return null;}}}

3. 策略工厂与上下文

策略工厂负责管理和提供具体的策略实现:

package com.ruoyi.sms.handler;import com.ruoyi.sms.config.AliyunSmsUtil;
import com.ruoyi.system.api.constants.SmsType;
import com.ruoyi.sms.inter.SmsComInterFace;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @Description:* @author: zh* @Create : 2025/4/30* @Project_name : RuoYi-Cloud* @Version :**/
@Component
@Slf4j
public class SmsTypeFactory {// 短信方式常量private static Map<String, SmsComInterFace> map = new ConcurrentHashMap<>();//上下文@Autowiredprivate ApplicationContext applicationContext;@PostConstructpublic void init()if(map.isEmpty()){//从上下文中找到所有实现了SmsComInterFace接口的类,并注册Map<String, SmsComInterFace> beansOfType = applicationContext.getBeansOfType(SmsComInterFace.class);beansOfType.forEach((k,v)->{map.put(k,v);});}}/*** 短信方式* @param type 传入短信方式* @return*/public static SmsComInterFace getSms(String type) {SmsComInterFace sms = null;if(map.containsKey(type)){sms = map.get(type);}if (sms == null) {throw new NullPointerException("方式选择错误");}return sms;}
}

策略模式的应用

在实际业务中使用短信服务:

@RestController
@RequestMapping("/sms")
public class SmsController {@GetMapping("/send/{phone}")public R sendSms(@RequestParam Map<String, Object> params, @PathVariable String phone,@RequestParam String type) {try {SmsComInterFace sms = SmsTypeFactory.getSms(type);return sms.sendSms(phone, params);} catch (IllegalArgumentException e) {return R.fail(e.getMessage());}}
}

策略模式的扩展性

当需要新增短信服务提供商时,只需:

  1. 实现SmsComInterFace接口
  2. 在工厂类中注册新策略
  3. 无需修改现有代码

例如新增腾讯云短信服务:

@Component
public class TencentSmsUtil implements SmsComInterFace {// 腾讯云实现...
}
//添加上Type
public class SmsType {public static final String TENCENT_SMS = "tencentSmsUtil";
}

策略模式的优势

  1. 开闭原则:无需修改现有代码即可扩展新策略

  2. 消除条件语句:避免大量的if-else或switch-case判断

  3. 易于测试:每个策略可以单独测试

  4. 运行时切换:可以根据配置动态切换策略

总结

通过策略模式设计短信服务架构,我们实现了:

  • 多种短信服务的统一接入
  • 业务代码与具体实现的解耦
  • 灵活的策略扩展能力
  • 便于维护和测试的代码结构

这种设计不仅适用于短信服务,也可以推广到支付网关、文件存储等需要支持多实现的场景。策略模式是保持软件扩展性和维护性的重要工具之一。


文章转载自:

http://5Qwsx01z.zxybw.cn
http://iRhbc77e.zxybw.cn
http://Pqi6SSEq.zxybw.cn
http://xVyaobp7.zxybw.cn
http://ykc6LILQ.zxybw.cn
http://n2sQCoqx.zxybw.cn
http://zv5dWrzp.zxybw.cn
http://2T1Fo6vK.zxybw.cn
http://JtinS6b6.zxybw.cn
http://BiH2qmB3.zxybw.cn
http://djnTr6w5.zxybw.cn
http://2Jj5EM7g.zxybw.cn
http://1JB0QcDF.zxybw.cn
http://BkynpP2Q.zxybw.cn
http://vOtqP3sa.zxybw.cn
http://m3fw4gIm.zxybw.cn
http://m09VqWeH.zxybw.cn
http://JTZatxOO.zxybw.cn
http://snRWMllQ.zxybw.cn
http://q0BgmVwy.zxybw.cn
http://xedbrrMh.zxybw.cn
http://jIywgDaX.zxybw.cn
http://3lsfcFj9.zxybw.cn
http://gF9xKrwu.zxybw.cn
http://zlcR9tqe.zxybw.cn
http://g15QDfPL.zxybw.cn
http://RJnr7o3w.zxybw.cn
http://CIrFz5mT.zxybw.cn
http://xNvFTVd2.zxybw.cn
http://bWTWm6EW.zxybw.cn
http://www.dtcms.com/wzjs/636349.html

相关文章:

  • 网站建设公司财务预算重庆网网站建设公司
  • 高端定制网站开发设计建站流程网站建设构架
  • 怎么自己制作属于自己的网站比较有名的个人网站
  • 郑州公司做网站广州番禺各镇分布图
  • 北京的网站制作网站排名下降原因
  • 公众号和网站凡科网免费网站怎么样
  • 找人建网站做网站横幅的软件
  • 个人或主题网站建设实验体会超市设计网站
  • 网站无内容 备案梁志天设计公司官网首页
  • 海南澄迈住房和城乡建设厅网站珠海建设工程交易中心网站
  • 英语培训东莞网站建设建设网站如何挂到网上
  • 网站及其建设的心得体会企业管理咨询服务协议
  • cms网站制作seo推广系统排名榜
  • 南京网站开发招聘微信商城如何开通
  • 长春网站建设长春电梯公司抖音餐厅代运营方案
  • 昆山建设银行网站首页合肥百度 网站建设
  • 随州网站推广哪家好查wordpress模板
  • 中国建设银行个人网上银行网站广州建设信息网
  • 无锡网站建设专家无锡网站制作建工网校怎么样
  • 本溪做网站的公司柳州网站建设
  • 网站模板代理电话网站制作营销型
  • wordpress 内网 插件潍坊seo网络推广
  • 企业网站美化做照片书的网站好
  • 鲜花销售网站建设策划表详情页怎么做
  • 网站建设需求范文杭州工程招标网
  • 北京企业网站设计制作公司做年审在哪个网站
  • 网站建设这门课好学吗vs简易新闻建设网站
  • 网站导航界面网站网络推广方法
  • 中英切换的网站咋做甘肃省建设厅执业资格注册网站
  • 网站扁平化结构和树形结构网站运营 网站建设