目前具体情况是这样的,我们有一个短信服务模块,此前都是单一的服务商,但是现在需要接入多个不同的服务商,各个服务商提供的接口参数、加签、加密都有些区别,现在需要把这个服务做成适配多服务商的,方便后续的开发维护,各位大佬有没有思路或者办法,还请指教一番!!!多谢各位
可以参考一下 使用PHP写的 的 Easy SMS 组件
https://github.com/overtrue/easy-sms
支持目前市面多家服务商
一套写法兼容所有平台
简单配置即可灵活增减服务商
内置多种服务商轮询策略、支持自定义轮询策略
统一的返回值格式,便于日志与监控
自动轮询选择可用的服务商
用工厂模式
传参的时候在之前的基础上加一层映射关系就好了
适配器模式
封装接口调用
我理解的是你需要把1对1变成多对一。你们是运行商吗?
我们不是运营商,只不过有个模块用到多个不同的短信运营商,所以想要做适配
@Majesity: 哦,明白了
发送适配接口
IMessage
{
sendMessage(MessageRequest MR)
}
供应商A
MessageA :IMessage{
sendMessage(MessageRequest MR){.....}
}
供应商B
MessageB :IMessage{
sendMessage(MessageRequest MR){......}
}
发送工厂
MessageFactory
{
public IMessage getMessage(MessageRequest mr)
{
if (mr == null)
{
return null;
}
if (mr.RequestType == 1)
{
return new MessageA();
}
else if (mr.RequestType == 2)
{
return new MessageB();
}
return null;
}
}
发送短信Model
MessageRequest{
RequestType //商家枚举1商家A,2商家B
RequestSign //签名密钥
RequestUrl //发送短信请求URL
RequestData //发送短信Data
ReturnData //调用后返回数据
Success //发送是否成功
}
Test Code:
MessageRequest mr = new MessageRequest();
mr.RequestType = 1;
mr.RequestUrl = "http://www.baidu.com/xxx";
...................
MessageFactory mf=new MessageFactory();
//获取发送对象
IMessage m = mf.getMessage(mr);
//调用 发送方法
m.sendMessage(mr);
以后还有商家C.D.添加MessageC,MessageD即可,再修改MessageFactory类即可,其他代码不用动。。