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

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 2017美赛A题论文阅读笔记

    2017美赛A题论文阅读笔记2017美赛O奖论文阅读笔记

    2022年5月27日
  • keras+resnet34实现车牌识别

    keras+resnet34实现车牌识别1.使用PIL和opencv生成车牌图像数据fromPILimportImageFont,Image,ImageDrawimportcv2importnumpyasnpimportosfrommathimport*#创建生成车牌图像数据的类index={“京”:0,”沪”:1,”津”:2,”渝”:3,”冀”:4,”晋”:5,”蒙”:6,”辽”:7,”吉”:8,”黑”:9,”苏”:10,”浙”:11,”皖”:12,

    2022年9月28日
  • 关于write()和fsync()

    关于write()和fsync()writessize_twrite(intfd,constvoid*buf,size_tcount);将数据写到文件中.注意,如果文件是保存在硬盘中,write()函数调用返回之后,并不表示数据已经写入到硬盘中,这时如果掉电,数据可能会丢失.fsyncintfsync(intfd);程序调用本函数,通知内核把数据写到硬盘(file)中.比如,…

    2022年5月31日
  • Ubuntu18.04 Cmake升級

    Ubuntu18.04 Cmake升級

    2020年11月8日
  • mle与map_normal map

    mle与map_normal map摘要本文是关于MLE(最大似然估计)与MAP(最大后验概率)的一些自己学习的心得.(本文的重点在于对比MLE和MAP)正文1.MLE(最大似然估计)MLE简单的理解可以这样:假设我们手上有一批数据(样本),而且我们假设这些数据(样本)服从某个分布(模型已知),但是参数未知.这个时候,我们希望对这个参数进行估计,而MLE的思想就是找到一个参数值,使得每条样本出现的概率最…

    2022年10月31日
  • ScaleAnimation 缩放动画效果[通俗易懂]

    ScaleAnimation 缩放动画效果[通俗易懂]ScaleAnimation(floatfromX,floattoX,floatfromY,floattoY,intpivotXType,floatpivotXValue,intpivotYType,floatpivotYValue) 参数说明: floatfromX动画起始时X坐标上的伸缩尺寸floattoX动画结束时X坐标上的伸缩尺寸fl

    2022年10月10日

发表回复

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

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