项目实践中用到的工厂模式

该博客介绍了如何利用工厂模式来实现不同渠道的短信发送功能。通过定义统一的发送短信接口`ISendSms`,并为每个渠道如漫道短信、阿里云短信、华为云短信创建具体的实现类,再结合工厂类`SendSmsFactory`利用反射动态创建实例,可以根据业务场景灵活选择短信发送渠道。示例代码展示了在审批和通知业务中如何选择合适的短信发送实现。
摘要由CSDN通过智能技术生成

项目中发短信可能是多渠道的,比如漫道短信、阿里云短信、华为云短信等,不同的客户可能走的不同的渠道,此处可以应用工厂模式。

1.定义发短信的统一接口

public interface ISendSms {

    /**
     * 发送短信
     * @param content
     * 			短信内容
     * @param mobile
     * 			手机号
     * @param cell
     * 			小号
     * @param begin
     * 			时间
     */
    SendResult sendSms(String content, String mobile, String cell, long begin);
}

2.多种渠道去实现,此处忽略不写了。

3.创建工厂类,利用反射

public class SendSmsFactory {

    private static Logger LOGGER = LogManager.getLogger(SendSmsFactory.class);

    @SuppressWarnings("unchecked")
    public <T extends ISendSms> T createFactory(Class<T> c) {
        T product = null;
        try {
            product = (T) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            LOGGER.error("class forName fail", e);
		} 
		return product;
	}

}

4.根据不同业务场景,使用工厂发送短信

private static SendResult sendChannelSms(String content, String mobile, String cell, long begin) {
        //创建工厂
        SendSmsFactory factory = new SendSmsFactory();
        ISendSms sendSms = null;
        if (StringUtils.isNotBlank(cell)) {//审批
            if ("MD".equals(SMS_DEFAULT_APPROVE)) {
                sendSms = factory.createFactory(EntinfoSendSms.class);
            } else if ("WN".equals(SMS_DEFAULT_APPROVE)) {
                sendSms = factory.createFactory(WnSendSms.class);
            }
        } else {//通知
            if ("MD".equals(SMS_DEFAULT_NOTICE)) {//通知
                sendSms = factory.createFactory(EntinfoSendSms.class);
            } else if ("WN".equals(SMS_DEFAULT_NOTICE)) {
                sendSms = factory.createFactory(WnSendSms.class);
            }
        }
        return sendSms.sendSms(content, mobile, cell, begin);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值