首页 > 编程语言 >JAVA 策略模式

JAVA 策略模式

时间:2025-01-23 15:13:37浏览次数:1  
标签:verifyCodeStratergy smsDto 策略 模式 VerifyCodeStratergy SendSmsDTO new JAVA public

策略模式(strategy pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。

不同国家发送短信验证码算法不同

例如中国和哈萨克斯坦的短信模版、使用系统、签名不同

策略模式实现

策略模式的本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
抽象策略类

public interface VerifyCodeStratergy {
SendSmsDTO sendVerifyCode(SendSmsDTO smsDto);
}

实现类

/**
* @discription 中国短信模版
* @auther
* @date 2025/1/23/023 14:24
*/
public class ChinaSendVerifyCode implements VerifyCodeStratergy {
@Override
public SendSmsDTO sendVerifyCode(SendSmsDTO smsDto) {
smsDto.setTemplateCode("SMS_218620270");
smsDto.setSystem("c-oms");
return smsDto;
}
}


/**
* @discription 哈萨克斯坦短信模版
* @auther
* @date 2025/1/23/023 14:25
*/
public class KazakhstanSendVerifyCode implements VerifyCodeStratergy {
@Override
public SendSmsDTO sendVerifyCode(SendSmsDTO smsDto) {
smsDto.setTemplateCode("SMS_475926045");
smsDto.setSystem("OMS");
smsDto.setSignName("Speedaf");
return smsDto;
}
}

环境类

/**
* @discription 验证码环境类
* @auther
* @date 2025/1/23/023 14:47
*/
public class SendVerifyCodeContext {
private VerifyCodeStratergy verifyCodeStratergy;

public VerifyCodeStratergy init(String countryCode){
Map<String,VerifyCodeStratergy> map = new HashMap<>();
map.put("CN", new ChinaSendVerifyCode());
map.put("KZ",new KazakhstanSendVerifyCode());
this.verifyCodeStratergy = map.get(countryCode);
if(Objects.isNull(verifyCodeStratergy)){
verifyCodeStratergy = new VerifyCodeStratergy() {
@Override
public SendSmsDTO sendVerifyCode(SendSmsDTO smsDto) {
System.out.println("----------------");
System.out.println("default");
return smsDto;
}
};
}
return verifyCodeStratergy;
}
}

业务实例

SendSmsDTO smsDto = new SendSmsDTO();

SendVerifyCodeContext codeContext = new SendVerifyCodeContext();
VerifyCodeStratergy stratergy = codeContext.init(countryCode);
smsDto = stratergy.sendVerifyCode(smsDto);

标签:verifyCodeStratergy,smsDto,策略,模式,VerifyCodeStratergy,SendSmsDTO,new,JAVA,public
From: https://www.cnblogs.com/javaazj/p/18687785

相关文章

  • java基础Day6 java数组
    一、数组的定义二、数组的声明和创建dataType[]arrayRefVar;//首选方法dataTypearrayRefVar[];//效果相同,但不是首选方法int[]nums;//声明一个数组nums=newint[10];//创建一个数组//给数组元素赋值nums[0]=1;nums[1]=2;nums[2]=3;nums[3]=4;nums[4]=......
  • JAVA与数据结构-线性表
    目录一.线性表的概念二.线性表的关系及分类三.数组与顺序表四.链表1.静态链表(链表的的数组底层实现)2.循环链表3.双向链表五.栈1.栈的概念2.栈的底层实现3.共享空间栈4.逆波兰表达式(后缀表达式)5.栈与递归 六.队列1.队列概念2.队列的底层实现3.循环队列七.链......
  • java基于SSM框架的健康医疗体检管理系统
    Java基于SSM(Spring+SpringMVC+MyBatis)框架的健康医疗体检管理系统是一种专为医疗机构设计的信息化解决方案。一、系统背景与目的随着医疗行业的快速发展和人们对健康需求的日益增加,体检业务已成为医疗机构的重要组成部分。为了提高体检业务的管理效率和服务质量,基于Java和......
  • Java02-基础语法
    Java基础语法[任务列表]1.注释2.字面量3.变量4.关键字、标识符5.方法6.类型转换7.输入输出8.运算符9.其他知识点——————————————————————————————————————————————————1.注释注释:解释说明代码功能。单行注......
  • JAVA实战开源项目:在线旅游网站(Vue+SpringBoot) 附源码
    本文项目编号T025,文末自助获取源码\color{red}{T025,文末自助获取源码}......
  • JAVA实战开源项目:社区团购系统(Vue+SpringBoot) 附源码
    本文项目编号T024,文末自助获取源码\color{red}{T024,文末自助获取源码}......
  • JAVA实战开源项目:课程作业管理系统(Vue+SpringBoot) 附源码
    本文项目编号T023,文末自助获取源码\color{red}{T023,文末自助获取源码}......
  • leetcode——缺失的第一个整数(java)
    给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3解释:范围[1,2]中的数字都在数组中。示例2:输入:nums=[3,4,-1,1]输出:2解释:1在数组中,但2......
  • java基础Day6 java方法
    一、什么是方法?System.out.println()//System是一个类,out是一个对象,println()就是一个方法方法是语句的集合命名规则:首字母小写+驼峰命名规则Ex.加法Demo01//加法publicintadd(inta,intb){returna+b;}此时在main方法里直接调用不了,改为:p......
  • Web-Chains:Web 版 Java Payload 生成与利用工具
    免责声明本文所提供的文字和信息仅供学习和研究使用,请读者自觉遵守法律法规,不得利用本公众号所提供的信息从事任何违法活动。本文不对读者的任何违法行为承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。工具介绍Web-Chains项目,又名Java-Chains项目,我们站在巨人......