php工厂模式使用场景[通俗易懂]

php工厂模式使用场景[通俗易懂]场景:使用工厂模式接入:阿里短信验证、腾讯短信验证、百度短信验证创建类文件BaseSMS.php–基础短信服务接口类AliSMS.php–阿里短信服务类BaiduSMS.php–百度短信服务类TencentSMS.php–腾讯短信服务类SmsBusiness.php–短信业务逻辑类具体代码BaseSMS.php–基础短信服务接口类interfaceBaseSMS{publicstaticfunctionsendCode($phone,$co

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

场景:使用工厂模式接入:阿里短信验证、腾讯短信验证、百度短信验证

创建类文件

  1. BaseSMS.php – 基础短信服务接口类
  2. AliSMS.php – 阿里短信服务类
  3. BaiduSMS.php – 百度短信服务类
  4. TencentSMS.php – 腾讯短信服务类
  5. SmsBusiness.php – 短信业务逻辑类

具体代码

BaseSMS.php – 基础短信服务接口类

interface BaseSMS
{ 
   
    public static function sendCode($phone, $code);
}

AliSMS.php – 阿里短信服务类

class AliSMS implements BaseSMS
{ 
   
	public static function sendCode($phone, $code){ 
   
		// 这里是阿里云短信服务代码
		// XXXXXXXXXXXXXXXXXXXXX
		return '阿里云短信验证码发送成功';
	}
}

BaiduSMS.php – 百度短信服务类

class BaiduSMS implements BaseSMS
{ 
   
	public static function sendCode($phone, $code){ 
   
		// 这里是百度云短信服务代码
		// XXXXXXXXXXXXXXXXXXXXX
		return '百度云短信验证码发送成功';
	}
}

TencentSMS.php – 腾讯短信服务类

class TencentSMS implements BaseSMS
{ 
   
	public static function sendCode($phone, $code){ 
   
		// 这里是腾讯云短信服务代码
		// XXXXXXXXXXXXXXXXXXXXX
		return '腾讯云短信验证码发送成功';
	}
}

SmsBusiness.php – 短信业务逻辑类

class SmsBusiness
{ 
   
	public static function sendCode($phone, $len = 4, $type){ 
   
		// 生成短信验证码
		$code = mt_rand(1000,9999); // 默认为4位数验证码
		if ($len == 6){ 
    // 长度为6,则生成6位数验证码
			$code = mt_rand(100000,999999);
		}
		
		// 工厂模式创建不同的短信服务商
		$smsObj = null;
		switch($type){ 
   
			case 'ali':
				$smsObj = new AliSMS();
			break;
				case 'baidu':
				$smsObj = new BaiduSMS();
			break;
				case 'tencent':
				$smsObj = new TencentSMS();
			break;
		}
		
		$sms = $smsObj::sendCode($phone, $code);
		if ($sms) { 
   
            // 成功:把短信验证码记录到 redis, 并且设置失效时间
            cache(config('stores.redis.prefix') . $phone, $code, config('stores.redis.expire'));
        }
		return true;
	}
}

最后,控制器调用 业务逻辑层短信发送验证码服务

class SMSController { 
   
	public function code (){ 
   
		$phone = request()->param('phone_number', '', 'trim');
		
		/* * 这里是参数验证,略 */
		
		// 调用业务逻辑层的sendCode
        if (SmsBusiness::sendCode($phoneNumber, config('code.code.length'), 'ali')){ 
   
            return show(config('status.success'), '验证码发送成功');
        }
        return show(config('status.error'), '验证码发送失败');
	}
}

——- THE END ——-

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164357.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号