策略模式(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);标签:verifyCodeStratergy,smsDto,策略,模式,VerifyCodeStratergy,SendSmsDTO,new,JAVA,public From: https://www.cnblogs.com/javaazj/p/18687785
smsDto = stratergy.sendVerifyCode(smsDto);