策略模式实现短信平台切换
如果你需要更通用的代码,以便在不同的短信平台之间进行切换,你可以使用策略模式来实现。策略模式允许你在运行时选择不同的策略(即短信平台),而无需改变主要的业务逻辑。
首先,创建一个SmsPlatform接口,定义发送短信的方法:
public interface SmsPlatform {
void sendSms(String phoneNumber, String message);
}
然后,分别创建阿里、腾讯和华为短信平台的实现类:
@Service
public class AliSmsPlatform implements SmsPlatform {
// 实现发送短信的逻辑
}
@Service
public class TencentSmsPlatform implements SmsPlatform {
// 实现发送短信的逻辑
}
@Service
public class HuaweiSmsPlatform implements SmsPlatform {
// 实现发送短信的逻辑
}
接下来,创建一个SmsService类,负责管理短信平台的选择和发送短信的操作:
@Service
public class SmsService {
private final Map<String, SmsPlatform> platformMap;
@Autowired
public SmsService(List<SmsPlatform> smsPlatforms) {
platformMap = smsPlatforms.stream()
.collect(Collectors.toMap(platform -> platform.getClass().getSimpleName(), Function.identity()));
}
public void sendSms(String phoneNumber, String message) {
for (SmsPlatform platform : platformMap.values()) {
try {
platform.sendSms(phoneNumber, message);
return; // 发送成功后立即返回
} catch (Exception e) {
// 发送失败,继续下一个平台的尝试
}
}
throw new RuntimeException("All SMS platforms are unavailable.");
}
}
在以上代码中,SmsService的构造函数使用了List
最后,在调用短信发送的地方注入SmsService并使用它来发送短信:
@Service
public class YourService {
private final SmsService smsService;
@Autowired
public YourService(SmsService smsService) {
this.smsService = smsService;
}
public void sendSms(String phoneNumber, String message) {
smsService.sendSms(phoneNumber, message);
}
}
这样,你可以根据需要配置不同的短信平台实现类,并在运行时根据可用性进行切换。如果所有平台都不可用,将抛出运行时异常。