用Java实现通过多家供应商发送短信

下面是一个基本的Java代码示例,可以通过多家供应商发送短信:
普通版

import java.io.*;
import java.net.*;
import java.util.*;

public class SmsSender {

    private static final String VENDOR_1_API_URL = "https://vendor1api.com/sendSMS";
    private static final String VENDOR_2_API_URL = "https://vendor2api.com/sendSMS";
    private static final String VENDOR_1_API_KEY = "vendor1apikey";
    private static final String VENDOR_2_API_KEY = "vendor2apikey";

    public static void sendSms(String vendor, String recipient, String message) throws Exception {

        String apiUrl = null;
        String apiKey = null;

        if (vendor.equals("vendor1")) {
            apiUrl = VENDOR_1_API_URL;
            apiKey = VENDOR_1_API_KEY;
        } else if (vendor.equals("vendor2")) {
            apiUrl = VENDOR_2_API_URL;
            apiKey = VENDOR_2_API_KEY;
        } else {
            throw new IllegalArgumentException("Invalid vendor: " + vendor);
        }

        URL url = new URL(apiUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Authorization", apiKey);
        conn.setDoOutput(true);

        String jsonPayload = "{\"recipient\":\"" + recipient + "\",\"message\":\"" + message + "\"}";

        OutputStream os = conn.getOutputStream();
        os.write(jsonPayload.getBytes());
        os.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

        String output;
        System.out.println("Output from " + vendor + " API:");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        conn.disconnect();
    }

    public static void main(String[] args) {
        try {
            sendSms("vendor1", "1234567890", "Hello from Vendor 1");
            sendSms("vendor2", "0987654321", "Hello from Vendor 2");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个代码示例定义了两个供应商的API URL和API密钥,分别是VENDOR_1_API_URLVENDOR_2_API_URLVENDOR_1_API_KEYVENDOR_2_API_KEY。在sendSms方法中,根据供应商参数选择API URL和API密钥,构造JSON负载,并将其作为POST请求发送到API。然后,读取API的响应并输出到控制台。

main方法中,使用sendSms方法发送两条短信,分别使用vendor1vendor2作为供应商参数。

请注意,这只是一个基本的示例,您需要根据您所使用的供应商的具体API进行修改。

进阶-设计模式版

为了通过多家供应商发送短信,可以使用工厂模式和策略模式的组合来实现。

首先,使用工厂模式创建一个名为 SMSProviderFactory 的工厂类。该工厂类的作用是根据供应商名称创建相应的 SMSProvider 对象。SMSProvider 是一个抽象类,其中包含发送短信的方法 sendSMS

接下来,创建具体的供应商类 SupplierAProviderSupplierBProvider,这些类继承 SMSProvider 并实现 sendSMS 方法。每个具体供应商类都实现了它自己的发送短信逻辑。

然后,创建一个名为 SMSManager 的类,它使用策略模式来决定使用哪个供应商发送短信。该类包含一个 SMSProvider 类型的成员变量,并在构造函数中初始化该变量为默认的供应商。类还包含一个名为 setProvider 的方法,该方法允许客户端设置使用的供应商。

最后,在客户端代码中使用 SMSManager 对象来发送短信。可以使用 setProvider 方法来更改使用的供应商。

// 抽象供应商类
public abstract class SMSProvider {
    public abstract void sendSMS(String phoneNumber, String message);
}

// 具体供应商类 A
public class SupplierAProvider extends SMSProvider {
    public void sendSMS(String phoneNumber, String message) {
        // 发送短信逻辑
    }
}

// 具体供应商类 B
public class SupplierBProvider extends SMSProvider {
    public void sendSMS(String phoneNumber, String message) {
        // 发送短信逻辑
    }
}

// 工厂类
public class SMSProviderFactory {
    public static SMSProvider createProvider(String providerName) {
        if (providerName.equals("SupplierA")) {
            return new SupplierAProvider();
        } else if (providerName.equals("SupplierB")) {
            return new SupplierBProvider();
        } else {
            throw new IllegalArgumentException("Invalid provider name");
        }
    }
}

// 管理器类
public class SMSManager {
    private SMSProvider provider;

    public SMSManager() {
        provider = SMSProviderFactory.createProvider("SupplierA");
    }

    public void setProvider(String providerName) {
        provider = SMSProviderFactory.createProvider(providerName);
    }

    public void sendSMS(String phoneNumber, String message) {
        provider.sendSMS(phoneNumber, message);
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        SMSManager smsManager = new SMSManager();
        smsManager.sendSMS("1234567890", "Hello, world!");

        smsManager.setProvider("SupplierB");
        smsManager.sendSMS("0987654321", "Goodbye, world!");
    }
}


在上述示例中,SMSProviderFactory 工厂类根据供应商名称创建相应的 SMSProvider 对象。SMSManager 类使用策略模式来决定使用哪个供应商发送短信。客户端代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值